我在Laravel控制器中编写代码,我希望捕获一些直接触发响应的异常,而不会返回路径。
例如,我写了一个返回404响应的方法:
public static function respondNotFound( $message = null, $instantResponse = false )
{
$message = $message ? $message : "Not Found";
$statusCode = self::STATUS_NOTFOUND;
return self::makeResponse( array( 'status' => $statusCode, 'message' => $message ), $statusCode );
}
此方法调用另一个方法来构建Illuminate Response
protected static function makeResponse( $data, $statusCode = self::STATUS_OK, $instantResponse = false )
{
$response = Illuminate\Support\Facades\Response::json( $data, $statusCode );
$response->setCallback( Input::get( 'callback' ) );
if( $instantResponse ) {
//..... I want to fire my Response here!
}
else {
return $response;
}
}
参考上面的方法,我想指定我的响应必须直接触发而不是被外部返回,避免回归"回归"。
我的解决方案是设置一些php标题然后终止脚本,但我认为它有点粗糙。
有人可以帮助我吗?
提前致谢。
答案 0 :(得分:0)
我很困惑 - 你为什么不使用App::missing()
过滤器并在那里处理你的404?
在'app / start / global.php'中添加:
App::missing(function($exception)
{
if (Request::ajax())
{
return Response::json( ['status' => 'error', 'msg' => 'There was an error. I could not find what you were looking for.'] );
}
elseif ( ! Config::get('app.debug'))
{
return Response::view('errors.404', array(), 404);
}
});
从查看代码 - 您似乎正在复制响应类。我不明白你为什么这么做,当你可以做的时候
return Response::view('error', $message, $statuscode);
您申请中的任何地方......
编辑:您也可以
App::abort(404);
然后在您的应用中捕获中止过滤器。您可以将404更改为您想要的任何HTTP响应代码。