Вывод переменных после проверки на существование Laravel

D
На сайте с 28.06.2008
Offline
1103
221

Изучаю Ларавел, дошел до темы -  Вывод переменных после проверки на существование.

В контроллере

class Test extends Controller
{
    public function sum($num1, $num2)
    {
        return view('test.show', ['city' => 'СПб']);
    }
}

В шаблоне два варианта

<p>{{ $city or 'Москва' }}</p>
<p>{{ isset($city) ? $city : 'Москва' }}</p>

В итоге получаю

1

СПб

Что за 1 ?

НО если в контроллере сделать переменную пустой 

['city' => '']

То на фронте останется только - 1.

Где я ошибаюсь? По идее ожидалось два раза вывод "СПб", а если пустая переменна - "Москва"

D
На сайте с 28.06.2008
Offline
1103
#1

В итоге даже так, если в контроллере сделать переменную пустой, то и на фронте пустота

@if(isset($city))
{{ $city}}
@else
{{ 'Москва'}}
@endif

ГДе я ошибаюсь?  Вроде делаю все как в доках https://laravel.ru/docs/v5/blade#отображение-5

Пока нужной логики добился только от варианта

@if(!empty($city))
{{ $city}}
@else
{{ 'Москва'}}
@endif
L
На сайте с 10.02.2015
Offline
224
#2
$city or 'Москва'

Это приводит к булево.


Оффтоп.

Почему Вы решили изучать лару?

P0
На сайте с 17.06.2010
Offline
94
#3

вам бы php сперва подучить

https://www.php.net/manual/ru/function.empty.php

https://www.php.net/manual/ru/function.isset.php

isset проверяет существует ли переменная и ее значение не null. empty проверяет пустое ли значение у переменной. к пустым относятся:

    "" (пустая строка)
    0 (целое число)
    0.0 (число с плавающей точкой)
    "0" (строка)
    NULL
    FALSE
    array() (пустой массив)


      можно решить и вот так:

      <p>{{ empty($city) ? 'Москва' : $city }}</p


      да и документация эта уже устарела. она для 5-й версии, сейчас уже актуальна 7 версия

      https://laravel.com/docs/7.x/blade

      https://kinobox.tv/ - бесплатный плеер с фильмами для киносайта.
      D
      На сайте с 28.06.2008
      Offline
      1103
      #4
      Я не пойму, почему <p>{{ $city or 'Москва' }}</p> выводит 1 ?
      Если убрать or 'Москва' то выводит как и ожидалось значение сити.
      P0
      На сайте с 17.06.2010
      Offline
      94
      #5
      Dram #:
      Я не пойму, почему <p>{{ $city or 'Москва' }}</p> выводит 1 ?
      Если убрать or 'Москва' то выводит как и ожидалось значение сити.

      выше уже ответили. при использовании OR вам возвращается результат проверки вашего условия (true, false) а не значения переменных. и если этот результат true/false перевести в строку, то получится 1 или 0

      https://www.php.net/manual/ru/language.operators.logical.php

      D
      На сайте с 28.06.2008
      Offline
      1103
      #6

      Как тогда понять эти данные из доков (пусть и к 5 версии),  https://laravel.ru/docs/v5/blade#отображение-5

      Вместо написания тернарного оператора Blade позволяет вам использовать такое удобное сокращение, которое будет скомпилировано в тернарный оператор, приведённый ранее:

      {{ $name or 'Default' }}

      Если переменная $name  имеет значение, то оно будет отображено, иначе будет выведено слово Default .

      P0
      На сайте с 17.06.2010
      Offline
      94
      #7
      Dram #:

      Как тогда понять эти данные из доков (пусть и к 5 версии),  https://laravel.ru/docs/v5/blade#отображение-5

      Вместо написания тернарного оператора Blade позволяет вам использовать такое удобное сокращение, которое будет скомпилировано в тернарный оператор, приведённый ранее:

      Если переменная $name  имеет значение, то оно будет отображено, иначе будет выведено слово Default .

      возможно, в версии 5.0-5.3 фреймворка так и работало. а в одной из следующих версии поменяли поведение, чтобы не путать разработчиков. начиная с версии 5.4 такого примера нет в документации, но появились @empty и @isset

      рекомендую пользоваться актуальной документацией. фреймворк довольно часто обновляется и многие вещи в нем сильно меняются https://laravel.com/docs/7.x/blade

      Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий