Laravel - 如何在刀片视图中尝试/捕获?

Posted

技术标签:

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

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

例子:

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

【问题讨论】:

你不应该在视图中尝试/捕捉。这应该发生在控制器中。 我知道这不是一个好主意。但我很好奇“创建一个关键字来编译它” 【参考方案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  ?>

【讨论】:

以上是关于Laravel - 如何在刀片视图中尝试/捕获?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Laravel 7 中查看不同内容时,刀片视图上的 ErrorException 未定义变量

Laravel - 如何在视图中创建(匿名)动态刀片组件

如何在 vue 组件中调用视图刀片 laravel?

如何在刀片视图 laravel 5.6 中访问定义的关系

如何在 laravel 刀片视图中打破 foreach 循环?

在刀片视图文件中使用laravel策略授权