переменная laravel выводит 1 вместо строки

#php #laravel #laravel-blade

#php #laravel #laravel-blade

Вопрос:

При печати переменной модели во входное значение этот код:

 value="{{ old('name',  $event->name or null) }}"
  

выводит: 1

и этот код:

 value="{{ old('name',  isset($evento->name) ? $evento->name : null) }}"
  

выводит: «фактическое значение»

Кто-нибудь знает почему? Первый пример — это предполагаемая работа, если я правильно читаю документы.

Комментарии:

1. В PHP первый пример гласит, что если первый аргумент не принимает значение true , то выполните второй (когда первый аргумент принимает значение true , он просто возвращает true ). true поскольку строка представляется как 1 . Вы могли бы сделать $event->name ?: null или, если вы используете >=PHP7 $event->name ?? null .

Ответ №1:

Если вы выполните тест и попытаетесь вывести значение, возвращаемое $event->name or null , вы увидите, что оно выполняется повторно true , в вашем html это переводится как 1 .

Ваш второй метод может быть переведен в псевдокод:

 if (isset(...))
    return name
else
    return null
  

Это фактически вернет name значение или null value.

В зависимости от вашей версии PHP (7.0) / Laravel (5.5), вы можете написать двумя более короткими способами.

 // PHP 7.0
$evento->name ?? null

// Laravel 5.5
optional($evento)->name
  

Комментарии:

1. Я предполагаю, что я не понял фактическую функциональность для этого оператора (я перехожу с CodeIgniter на Laravel) Я ожидал, что она выведет значение **или ** выведет второй аргумент

2. На самом деле, здесь ясно сказано, что мы не должны ее использовать: laravel-news.com/blade-templates-null-coalesce-operator Я просто читал старые руководства. Спасибо

Ответ №2:

Ваш код ведет себя таким образом, потому что в вашем первом коде вы в основном печатаете логическое выражение.

 $event->name or null
  

Вернет логическое значение, поэтому 0 или 1. С другой стороны, во второй версии кода вы используете тернарный оператор, который выполняет следующее:

  1. Проверьте, завершается ли $evento->name
  2. Если да, выведите $evento->name
  3. Если нет, возвращает null

Ответ №3:

В моем случае я прибыл сюда с точной проблемой, указанной в заголовке сообщения, но моя ситуация была немного иной, чем в OP.

Я обновлял устаревший блейд-код Laravel с указанием or вместо ?? .

Изменение {{ $variable or 'Default Value' }} на {{ $variable ?? 'Default Value' }} сработало для меня.