2016-08-23 19 views
1

일부 조건/쿼리 Laravel의 Eloquent 모델을 찾을 수없는 경우 사용자 지정 예외를 throw하는 것이 가능한지 궁금합니다.Laravel의 Eloquent Models에서 ModelNotFoundException을 재정의하는 방법은 무엇입니까?

예를 들어 Page 모델이있는 경우 PageNotFound 예외를 사용자 정의 할 수 있습니까?

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Page extends Model { 
} 

주어진 메시지와 함께 ModelNotFoundException가 발생합니다이 모델 :

No query results for model [App\Page]. 
+0

당신이 물어 본 질문에 답하기 위해, 당신이 원하는 모든 것을 던질 수있는'ModelNotFoundException'을 던지는 대신 각 모델에서'findOrFail'과'firstOrFail' 메소드를 문자 그대로 무시할 수 있습니다. 그러나 Tony의 대답에서 언급했듯이 대신에 getModel()을 호출 할 수 있습니다. – tam5

답변

3

app/Exceptions/Handler.php 시도에서 렌더링 기능

public function render($request, Exception $e) 
     { 
      if ($e 
       instanceof 
       \Illuminate\Database\Eloquent\ModelNotFoundException) 
      { 
       abort(404); 
      } 

      return parent::render($request, $e); 
     } 

편집
의 맨 위에 다음 코드를 추가 일단 ModelNotFoundE를 잡으면 xception 객체를 호출하면getModel()을 호출하여 모델의 클래스 이름을 가져올 수 있습니다.

+0

예, 나는 예외를 "처리"하는 방법을 알고 있지만 페이지, 포스트 등과 같은 다른 유형의 모델이 있습니다. ModelNotFound 예외의 $ e-> getMessage()를 구문 분석하지 않고 어떻게 발견했는지, 어떤 모델 찾을 수 없습니다? 내가 묻는 것은 모델을 찾을 수 없을 때 내 자신의 예외를 던지기위한 방법입니다. 쿼리에서 결과를 반환했는지 확인하기 위해 컨트롤러에서 수행 할 수 있습니다. 예외가 발생하거나 원하는 작업을 수행 한 후에도 내 질문에 대한 간단한 해결책이 없습니까? –

+0

ModelNotFoundException 객체에서 getModel()을 호출하기 만하면됩니다. 내 편집을 참조하십시오. –

+0

$ e-> getModel() 메소드가 하나인데, 그것에 대해 몰랐습니다. 그것은 정말로 내 질문에 답하지 못했지만 훨씬 더 나은 방법이었습니다. 감사! –

관련 문제