laravel 4:发生错误时路由到控制器

时间:2014-04-06 09:10:09

标签: php laravel laravel-4

我对laravel 4有疑问。我想处理发生的错误,例如404 Not Found或任何其他错误。但我想在发生此类错误时调用控制器。我试过这个:

App::missing(function($exception)
{
    return Response::view('errors.404', array('error'=>$exception), 404);
});

但实际上代码不是我的目的,我想要这样的东西:

//I know this code doesn't work, I've just wanted to show the claim
App::missing('HomeController@error');
App::error('HomeController@error');
// or ...

有没有办法在调用特定控制器的方法时处理错误?

2 个答案:

答案 0 :(得分:5)

没有什么能阻止你创建控制器实例并调用你想要调用的方法。

App::missing(function($exception)
{
    return App::make('HomeController')->error($exception);
});

答案 1 :(得分:3)

不,您无法直接使用App::missing('Controller@method'),因为missing方法调用error方法,即:

public function error(Closure $callback)
{
    $this['exception']->error($callback);
}

它接受一个闭包,但您可以从闭包中调用controller - > method。所以。像往常一样使用闭包声明处理程序,然后从闭包内调用控制器的方法。

作为旁注,我认为从闭包中调用一个方法没有任何重要性,因为你可能会从闭包中做同样的事情(很可能你会返回一个视图)然后为什么只是另一层?

<强>更新

App::missing(function($e){
    // Use the model here you want
    $var = 'SomeValue' from model
    return Response::view('errors.404', array('error'=> $e, 'another' => $var));
});