或操作员无法按预期工作laravel 5.7

时间:2018-12-29 12:02:40

标签: php laravel laravel-5.7

似乎很基本但是,如本链接或类似的内容所述:https://laravel-news.com/blade-or-operator我希望:

{{ $title or 'login' }}

必须这样编译:

if( isset($title) )
{
    echo $title;
}
else {
    echo 'login';
}

或简而言之等于:

isset($title) ? $title : 'login'

好吧,但是当我使用它时,laravel给我发了一个错误说:

  

ErrorException(E_ERROR)未定义的变量:标题(视图:   C:\ xampp \ htdocs \ site \ resources \ views \ layouts \ auth.blade.php)(查看:   C:\ xampp \ htdocs \ site \ resources \ views \ layouts \ auth.blade.php)   以前的例外情况

Undefined variable: title (View: C:\xampp\htdocs\site\resources\views\layouts\auth.blade.php) (0)
Undefined variable: title (0)

这意味着有问题。

您知道我的代码或配置中可能出什么问题吗?

预先感谢

4 个答案:

答案 0 :(得分:3)

laravel的新说法:

  

在下一个主要版本中,Laravel 5.7删除了Blade“ or”运算符。由于PHP 7中提供了新的Null Coalesce运算符,Andrew Brown提交了Laravel 5.7的PR,以从框架中删除Blade Defaults。

请一次查看。 https://laravel-news.com/blade-templates-null-coalesce-operator

您可以使用。

{{ $title ?? 'login' }}

答案 1 :(得分:1)

更好地在 php 7

中使用??(null coalescing operator)
{{ $title ?? 'login' }}
  

用于替换与   isset()函数。 Null合并运算符返回其第一个   操作数(如果存在)并且不为NULL;否则返回第二个   操作数。

答案 2 :(得分:1)

or运算符

Blade的“或”运算符已被删除,取而代之的是PHP内置的??“空合并”运算符,其目的和功能相同:

// Laravel 5.6...
{{ $foo or 'default' }}

// Laravel 5.7...
{{ $foo ?? 'default' }}

您可以使用:{{ $title ?? 'login' }}

答案 3 :(得分:0)

如果遇到这样的错误,则$title变量很可能未定义,因此请仔细检查代码。与此相关的是,Laravel的刀片系统似乎不再将or运算符编译成您期望的样子。检查您的缓存视图文件,您很可能会看到类似的内容

<?php echo e($title or 'login'); ?>

代替

<?php echo e(isset($title ) ? $title : 'login'); ?>

这是使用较旧版本的Laravel会得到的结果,从而导致错误的结果(第一个结果的计算值为布尔值。第二个结果返回$ title值或字符串“ login”,就像什么一样)您所期待的)。因此,在使用Laravel 5.7及更高版本时,建议立即使用null coalesce(??)运算符。