2014-04-06 16 views
4

laravel 4에 문제가 있습니다. 발생 된 오류 (예 : 404 Not Found) 또는 다른 오류를 처리하고 싶습니다. 하지만 이러한 오류가 발생하면 컨트롤러를 호출하고 싶습니다.laravel 4 : 오류가 발생했을 때 컨트롤러로 연결

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

특정 컨트롤러의 메소드를 호출 내에서 오류를 처리 할 수있는 방법이 있나요 : 나는 이런 식으로 뭔가를 원

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

그러나 실제로 위의 코드 내 목적은 아니다 :이 시도했습니다?

답변

3

아니, 당신은 App::missing('[email protected]')을 사용할 수 없습니다 직접 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)); 
}); 
+0

사실 나는 일부 변수 폼 모델을 해당 뷰에 전달하려고합니다. 이를 위해 제안이나 더 나은 해결책이 있습니까? –

+0

오류 처리기에서'Model'을 사용할 수 있습니다. –

+0

'router.php' 안에'model'을 직접 쓰고'controller'에 건네주지 않으시겠습니까? –

4

컨트롤러의 인스턴스를 만들고 호출 할 메서드를 호출하지 못하게 할 수는 없습니다.

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

가 ('HomeController') ::'반환 앱처럼'$ exception' 전달하기 -> 오류 ($ 예외)'. –

+0

이 방법을 사용하고 있지만 요청이 어떤 경로와도 일치하지 않으면 '개체가 아닌 개체의 필터()에 대한 호출'오류가 발생합니다 ([details here] (https://github.com)./laravel/framework/issues/2861 # issuecomment-53543679)). 그러나 요청이 경로와 일치하지만 모델이 발견되지 않으면 (예 :'firstOrFail()') 정상적으로 작동합니다. 어떤 생각? –

관련 문제