Аттрибут boolean почему-то возвращает integer

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Rikipm
Сообщения: 3
Зарегистрирован: 2019.01.14, 02:07

Аттрибут boolean почему-то возвращает integer

Сообщение Rikipm »

Есть поле status в модели. В правилах указано

Код: Выделить всё

['status', 'boolean'],
Далее я хочу добавить checkbox колонку в CRUD.

Код: Выделить всё

[
            'class' => 'yii\grid\CheckboxColumn',
            'checkboxOptions' => function ($model, $key, $index, $column) {
                return ['value' => $model->status, 'checked' => $model->status];
            }
],
В приведенном примере кода все checkbox получают HTML атррибут

Код: Выделить всё

checked => 0
либо

Код: Выделить всё

checked => 1
Однако если я напишу

Код: Выделить всё

[
            'class' => 'yii\grid\CheckboxColumn',
            'checkboxOptions' => function ($model, $key, $index, $column) {
                return ['value' => $model->status, 'checked' => $model->status ? true : false];
            }
],
Все работает как нужно: записи где status=1 получают checked, где status = 0 не получают checked

Нашел корень проблемы:

Код: Выделить всё

gettype($model->status)
возвращает integer

Но почему если в правилах он указан как boolean? Это особенность фреймворка или я что-то делаю не так?
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Аттрибут boolean почему-то возвращает integer

Сообщение masson »

Правила нужны для того, чтобы проверить значение на сервере перед сохранением в БД. К отрисовке в браузере они никак не относятся.
От браузера всегда приходит только строка, а дальше начинается это - https://php.net/manual/ru/types.comparisons.php
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Аттрибут boolean почему-то возвращает integer

Сообщение maleks »

Rikipm писал(а): 2019.06.23, 18:08 1)

Код: Выделить всё

gettype($model->status)
возвращает integer

2)Но почему если в правилах он указан как boolean? Это особенность фреймворка или я что-то делаю не так?
1) Если в БД колонка типа integer то yii это поле в модели тоже приведет к integer в момент создания

2) Правила нужны только для форм и валидации.
И кстати вот как булевый валидатор работает:
https://github.com/yiisoft/yii2/blob/ma ... or.php#L26
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Аттрибут boolean почему-то возвращает integer

Сообщение flashimage »

Дело в том, что это правила валидации для записи в ДБ. Соответственно данные будут преобразованы в тот вид, который понятен или используется базой данных. Для MySql bool и boolean, являются псевдонимами tinyint (1), соответственно и преобразовываются
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Ответить