abort(403); <-- works fine, will display laravel abort page
try{
$rows = DB::.......
if ( !$Rows ) {
abort(403);<-- this will become exception
} else {
}
} catch (Exception $e) {
}
当用户请求时我有一个页面,如果没有行我想使用laravel abort();终止页面。
无论如何,我都使用try catch包装我的代码,它将变成catch错误并导致laravel abort()无法正常工作。
任何人如何解决此问题?
答案 0 :(得分:0)
尝试此代码
try{
abort(403);
} catch (\Exception $e) {
if($e->getStatusCode()==403)
abort(403);
}
答案 1 :(得分:0)
\Exception
是所有php异常的基类。因此,当您在try .. catch块中捕获\Exception
时,实际上就是在捕获所有异常。
当您中止(403)时,laravel在内部抛出带有状态代码403的HttpException
。
如果您在laravel中看到,HttpException
扩展了PHP的\RuntimeException
,而实际上,它扩展了\Exception
类。
解决方案是捕获特定的异常,而不是捕获\Exception
。例如,如果您担心mysql连接,则可以捕获PDOException
。最好要具体说明要捕获的异常。
<?php
try{
$rows = DB::someaction()...;
if (!$rows) {
abort(403);
}
// Do stuff with $rows
}catch (PDOException $e) {
// take action for specific exception
}