【问题标题】:Or operator do not work as expected laravel 5.7或者操作员不能按预期工作 laravel 5.7
【发布时间】:2019-05-26 22:00:01
【问题描述】:

这似乎很基本但是在这个链接或类似的东西中提到: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)

这意味着这有问题。

你知道我的代码或配置有什么问题吗?

在此先感谢

【问题讨论】:

  • 你使用的是什么版本的 Laravel 和什么版本的 PHP?
  • @RossWilson 我在问题标题中提到了 laravel 版本,这是 5.7.19,我的 php 版本是 7.2.9

标签: php laravel laravel-5.7


【解决方案1】:

laravel new 怎么说:

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

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

你可以使用。

{{ $title ?? 'login' }}

【讨论】:

    【解决方案2】:

    最好在 php 7

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

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

    【讨论】:

      【解决方案3】:

      or 运算符

      Blade "or" 运算符已被移除,取而代之的是 PHP 内置的 ?? "null coalesce" 运算符,它具有相同的目的和功能:

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

      你可以像这样使用:{{ $title ?? 'login' }}

      【讨论】:

        【解决方案4】:

        如果您遇到此类错误,则您的 $title 变量很可能未定义,因此请仔细检查您的代码。在相关的说明中,Laravel 的刀片系统似乎不再将 or 运算符编译为您所期望的。检查你缓存的视图文件,你很可能会看到类似的东西

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

        而不是

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

        这是你在旧版本的 Laravel 中会得到的结果,导致错误的结果(第一个计算结果为布尔值。第二个返回 $title 的值或字符串 'login',就像你期待)。这就是为什么现在在使用 Laravel 5.7 及更高版本时建议使用 null coalesce (??) 运算符。

        【讨论】:

          猜你喜欢
          • 2012-08-25
          • 1970-01-01
          • 2020-08-26
          • 2017-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-26
          • 2013-05-28
          相关资源
          最近更新 更多