2016-07-13 4 views
1

그래서 정확하게 해결할 수 없었던 문제를 해결할 수 없었습니다.모델에 Laravel 사용자 정의 오류가 컨트롤러에 삽입되었습니다.

나는 Laravel이 좋은 findOrFail() 기능을 가지고 있지만, 내 경우에는 그것을 사용할 수없는 것으로 알고있다. 그래서 예를 들어 나는 다음과 같은 경로가 있습니다

public function show(User $user) 
{ 
    //never reaches this section 
} 

지금이 정상적으로 작동합니다

Route::get('user/{user}', '[email protected]); 

내 컨트롤러를하지만, 기록 않는 경우하지 나는 함수 내부에 들어 가지 전에 Laravel이 오류가 발생합니다 존재한다. 나는 그것이 훨씬 좋네요 내 함수 매개 변수의 사용자 클래스가 있고 거기를 제거하지 할 찾을

public function show($id) 
{ 
    $user = User::findOrFail($id) 
} 

내 기능을 변경하지 않고 오류를 잡기의 좋은 쉬운 방법이있다.

답변

2

: 당신이 당신의 자신"을 (를) 찾을 수 없습니다 "동작을 지정하려면

, 세 번째 인수로 Closure 전달

다음 model 방법 : 해당 코드를 배치 할 위치를

이전
$router->model('user', 'App\User', function() { 
    throw new NotFoundHttpException; 
}); 

그들은 지정

RouteServiceProvider::boot 메소드에서 모델 바인딩을 정의해야합니다.

+1

얼마나 바보 같은 내가 이것을 놓쳤습니다, 정말 내 문제를 해결해 주셔서 감사합니다! – killstreet

0

처음으로 질문에 대답하므로 나와 함께 곰!

PHP try/catch 블록을 사용할 수 있습니다. 이 같은 무언가 : 오류를 표시하려면

@if(!empty($error) && $error == 1) 
    <div> 
     <strong>Uh-Oh!</strong> 
     @if(!empty($message)) 
      {!! $message !!} 
     @endif 
    </div> 
@endif 

:

try { 
     //Your code here 
    } catch (\Exception $e) { 
     return \Redirect::to('/users') 
      ->with('error', 1) 
      ->with('message', 'Error getting your record!'); 
    } 

다음 Laravel에 당신이 뭔가를 할 수있는 블레이드. 원하는 오류 페이지로 리디렉션 할 수도 있습니다. the Laravel Docs for Route Model Binding합니다 ('사용자 정의'를 찾을 수 없습니다 "행동 '제목 아래로 스크롤) 당

+1

문제는 내 함수에서 아무 것도 할 수 없기 전에 오류가 표시된다는 것입니다. 에코를 "테스트"한다고하더라도; 주사위; 내 기능 안에서는 이것이 표시되지 않습니다. – killstreet

+0

코드가 함수에 전달되지 않으면 문제가 있음을 의미합니다. 경로는 사용자 ID의 URL 매개 변수가있는 GET입니다. 그래서 함수는 첫 줄에'public function show ($ userid)'를 읽어야합니다. 그런 다음 쿼리 할 때'$ user = User :: find ($ userid)'와 같은 것을 할 수 있습니다. 그런 다음 당신은'if ($ user) {// code} else {// 에러가있는 사용자로 돌아 가기} ' – user3776578

+0

Laravel 5에서'app() -> make (\ App \ Models) \ User :: class) -> 여기서 ('users.id', '=', $ userid) -> get();은 더 깨끗한 모델이라고 할 수 있습니다. – user3776578

관련 문제