Laravel Validator Boolean

  • Автор темы Автор темы Vano
  • Дата начала Дата начала

Vano

Новичок
Как работает Boolean валидатор? Почему-то он мне постоянно отдаёт ошибку:
Код:
The active field must be true or false.
. Я блин перед валидацией вообще жестко назначил true и вся равно ошибка
 
Я тебе сейчас умный вещь подскажу, а ты попробуй вникнуть. Найди этот валидатор в коде(через поиск по проекту. в папке vendor там найдется оно). Посмотри как он работает. Выясни причину. И сам все легко поймешь.
 
Пробую... Но еееесли это займет много вреееемени)
 
Если ты пользуешься нормальной ide, это займет 1 секунду поиска по имени класса.
А если не пользуешься, то это зря
 
PHP:
protected function validateBoolean($attribute, $value)
    {
        if (! $this->hasAttribute($attribute)) {
            return true;
        }
        $acceptable = [true, false, 0, 1, '0', '1'];
        return is_null($value) || in_array($value, $acceptable, true);
    }

Ключевая строка здесь:
PHP:
return is_null($value) || in_array($value, $acceptable, true);

Ну вот я потестил эту строку... true, 0, 1, '0', '1' возвращают true, но false возвращает false.... Бодяга какаято....
 
Последнее редактирование:
Если ты пользуешься нормальной ide, это займет 1 секунду поиска по имени класса.
А если не пользуешься, то это зря
откуда мне знать имя класса? Там куча классов с именем Validator, и как мне было знать что это не класс будет, а метод validateBoolean
 
Ну вот я потестил эту строку... true, 0, 1, '0', '1' возвращают true, но false возвращает false.... Бодяга какаято....
Хмм теперь норм возвращает true. Мб поспешил... неправильно задал.
 
Ладно. Пора открыть тайну... Я все таки грешу и пользуюсь так называемым "sanitize"'ом. Я знаю что это бред, не спрашивайте почему)
PHP:
    /**
     * @return array
     */
    public function rules()
    {
        $this->sanitize();

        return [
            'active' => 'boolean'
        ];
    }

    /**
     * @return void
     */
    public function sanitize()
    {
        $input = $this->all();

        $input['active'] = true;

        $this->replace($input);
    }
Я догадываюсь, что валидация делается на ориджинал риквест, но не могу этого доказать. (или опровергнуть и перейти к поискам других причин).
Пожалуйста помогите - почему при валидации ошибка?)

input('active') это с чекбокса приходит "yes" или не приходит вообще.
 
Сверху