【问题标题】:Laravel - How to a try/catch in blade view?Laravel - 如何在刀片视图中尝试/捕获?
【发布时间】:2015-10-03 08:35:54
【问题描述】:

我想创建一种在视图中编译的方法,try/catch。 我如何在 Laravel 中做到这一点?

例子:

@try
<div class="laravel test">
    {{ $user->name }}
</div>
@catch(Exception $e)
    {{ $e->getMessage() }}
@endtry

【问题讨论】:

  • 你不应该在视图中尝试/捕捉。这应该发生在控制器中。
  • 我知道这不是一个好主意。但我很好奇“创建一个关键字来编译它”

标签: laravel laravel-4 blade


【解决方案1】:

您应该在您的视图中有try/catch 块。视图就是这样:一些数据的表示。这意味着您不应该执行任何逻辑(例如异常处理)。一旦你从模型中获取数据,它就属于控制器。

如果您只是想在变量未定义的情况下显示默认值,您可以使用标准的PHP null coalescing operator 来显示默认值:

{{ $user->name ?? 'Name not set' }}

【讨论】:

  • 我在异常刀片中调用{{ url()-&gt;previous() }} 函数时遇到问题。我没有控制器来处理数据。 try 块对我有很大帮助。有时最好给出答案而不是建议。
【解决方案2】:

如果您在视图中需要try..catch,您可能做错了。但这并不意味着你永远不应该这样做。每条规则都有例外。

不管怎样,答案如下:

使用&lt;?php ?&gt;@php @endphp 标签将原始PHP 放在您的视图中。然后将您的 try..catch 放入原始 PHP 中。

@php
    try {
        // Try something
    } catch (\Exception $e) {
        // Do something exceptional
    }
@endphp

【讨论】:

    【解决方案3】:

    虽然我同意@areed 的观点,即如果您必须使用 try...catch,就会出现问题,但在某些奇怪的情况下,错误的方法可能会导致您走上这条路。一个实例是使用同一个刀片来容纳paginate()get() 响应。好吧,这可能会有所帮助。

    <?php try{ ?> 
        //try to show something
        {{ $products->links() }}
    <?php }catch(\Exception $e){ ?>
        // show something else
    <?php } ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 2016-09-26
      • 2013-11-20
      • 2017-08-07
      • 2019-09-28
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多