似乎很基本但是,如本链接或类似的内容所述: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)
这意味着有问题。
您知道我的代码或配置中可能出什么问题吗?
预先感谢
答案 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(??)运算符。