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()->previous()
函数时遇到问题。我没有控制器来处理数据。 try
块对我有很大帮助。有时最好给出答案而不是建议。【参考方案2】:
如果您在视图中需要try..catch
,您可能做错了。但这并不意味着你永远不应该这样做。每条规则都有例外。
不管怎样,答案如下:
使用<?php ?>
或@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 未定义变量