2016-07-19 3 views
1

У меня есть следующий код:Laravel findorfail() перенаправлять

public function showTestProfile($id){ 
     $auth = Auth::user(); 
     $tests = App\Test::findorfail($id); 
     return view('profile',compact('auth','tests','members')); 
    } 

, если у нас есть идентификатор в таблице БД то, что придет с findorfail(),

, но если добавить не существующий идентификатор URL-адрес, как это:

http://NewPro.dev/user-profile/24645645456

Тогда ни один из запросов не найдено larvel страницы придумывает.

Как я могу перенаправить на какой-либо маршрут, если у нас нет идентификатора.

ответ

2

Добавьте к вашему использованию в контроллере

use Illuminate\Database\Eloquent\ModelNotFoundException;//find or fail error exception class. 

и изменить вашего текущего код этого

public function showTestProfile($id){ 
    try{ 
     $auth = Auth::user(); 
     $tests = App\Test::findorfail($id); 
     return view('profile',compact('auth','tests','members')); 
    } 
    catch(ModelNotFoundException $err){ 
     //if id doesnt exist it will skip return view('profil.. 
     //and excute whatever in this section 
    } 
} 
0

Заменить findorfail с найти то $ тестов возвращает нуль, если идентификатор не существует.

public function showTestProfile($id){ 

     $auth = Auth::user(); 

     $tests = App\Test::find($id); 
      if(is_null($tests)) 
     { 
      return redirect()->to('index'); 
     } 

     return view('profile',compact('auth','tests','members')); 

    } 

Ниже процесс лучше, чем выше процесса

public function showTestProfile($id){ 
    try{ 
     $auth = Auth::user(); 
     $tests = App\Test::findorfail($id); 
     return view('profile',compact('auth','tests','members')); 
    } 
    catch(ModelNotFoundException $err){ 
     //if id doesnt exist it will skip return view('profil.. 
     //and excute whatever in this section 
    } 
}