2016-05-19 4 views
0

Я пытаюсь запустить этот код:Laravel 5,2 Try Поймайте не работает

Route::group(["prefix" => "{user}", "middleware" => "web"], function() { 
    Route::get("/", function (User $user) { 
     try { 
      return $user; 
     } catch (\Exception $e) { 
      echo "ads"; 
     } 
    }); 
    Route::get("/photos", function (User $user) { 
     return $user->albums; 
    }); 
}); 

Таким образом, в приведенном выше коде я использую Route Binding, когда пользователь вводит URL, как это: http://localhost:8000/myusername тогда он будет показывать эту информацию пользователю, но если пользователь не будет доступен, я просто хочу поймать исключение, чтобы он не работал.

Я получаю сообщение об ошибке:

enter image description here

Что должно быть проблемой? Зачем пытаться не работать.

+0

Параметр 'try' работает, вы возвращаете' $ user' и '$ user' определяется в вашем URL (на самом деле , он равен ** myusername **, даже если он не существует в вашей базе данных) Вам нужно сделать запрос, используя модель User, чтобы попытаться поймать пользователя, и если этот запрос вернет false, выведите ошибку. – Jiedara

+0

Похоже, что произошла ошибка перед кодом, который вы опубликовали. –

+0

Да в попытке я видел, что код работает. – Earon

ответ

1

То, как вы пытаетесь, не будет работать. У вас должно быть bind, чтобы показать Laravel, как запросить по имени, а не ID.

Добавить это до вашего Route::group:

Route::bind('user', function($value) 
{ 
    return User::where('name', $value)->first(); 
}); 

Вы можете удалить TRY/поймать. Если вы хотите проверить, если ваша модель была найдена, просто использовать, как это:

Route::get("/", function ($id) { 
    try { 
     return User::findOrFail($id); 
    } catch(ModelNotFoundException $e) { 
     echo "ads" 
    } 
}); 
Смежные вопросы