如何直接在Laravel中处理响应?

时间:2014-06-26 14:29:20

标签: laravel response httpresponse

我在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标题然后终止脚本,但我认为它有点粗糙。

有人可以帮助我吗?

提前致谢。

1 个答案:

答案 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响应代码。