У меня есть приложение Laravel.В таблице users
у меня есть столбец boolean
с именем active
:
$table->boolean('active')->default(false);
. И во внешнем интерфейсе я обычно проверяю, активен ли пользователь или нет:
Обычный JS: if(user.active){ // do stuff }
VueJS: v-if="user.active"
Этот подход предполагает, что значение свойства user.active
, которое, конечно, исходит из ответа json,это нестроковое значение: либо 0, либо 1. И это то, что я действительно получаю на локальной машине:
Здесь значения розового цвета представляют Строка значения и значения зеленого цвета представляют Число значений.Итак, очевидно, что мой локальный компьютер интерпретирует его как Числовое значение, и когда число 0 или 1 используется в условном выражении, оно преобразуется в логическое значение.
Однако на моем производственном сервере это не так.Ответ json на рабочем сервере преобразуется в строку, что приводит к непреднамеренному поведению моего приложения:
Обратите внимание, что значение для active
ключ не номер , это String здесь!И поскольку она интерпретируется как строка, любая непустая строка всегда будет иметь значение true
;следовательно, мое состояние всегда будет оцениваться как true
.
У меня есть два вопроса: а) Почему это происходит?б) Как это исправить?
Дополнительная информация: На рабочем и локальном серверах установлена одинаковая версия mysql.Версия PHP на prod: 7.2.8 и версия PHP на локальном: 7.2.9.