2015-08-06 5 views
0

послеобеденным SO,Laravel 4,2 Название модели от ModelNotFoundException

Я пытался тренировки, если есть способ узнать/пройти по названию модели, когда :: findOrFail() выполняет запрос ошибку ModelNotFoundException.

Это стало проблемой для меня в последнее время в приложении, в котором заказы могут быть удалены конечным пользователем. Если кто-то добавил в закладки URL-адрес или иным образом пытается посетить URL-адрес, связанный с удаленным заказом, я бросаю исключение и показываю страницу 404.

Модель декларации:

use Illuminate\Database\Eloquent\SoftDeletingTrait; 

class Order extends Eloquent 
{ 
    use SoftDeletingTrait; 
    ... 
} 

FindOrFail:

$order = $this->organisation->orders()->with('events', 'events.user', ...)->where('id', $id)->firstOrFail(); 

Exception Handler

use Illuminate\Database\Eloquent\ModelNotFoundException; 

App::error(function(ModelNotFoundException $e) 
{ 
    return Redirect::route('404')->withMessage(modelNameHere); 
}); 

Есть ли способ, чтобы определить, какая модель выбросила исключение и показать пользовательскую ошибку с это в виду.

Благодаря

+0

Вы добавили 'use' для названия модели? –

ответ

0

Ответ есть. Очень просто выяснить, какая модель вызвала исключение. Как только вы поймаете объект ModelNotFoundException, вы можете позвонить getModel(), чтобы получить имя класса модели, которая может быть найдена.

+0

Большое спасибо, это именно то, что я искал. Если вам неизвестно, где это можно найти в документации, вы можете указать мне в правильном направлении. – Joe1992

+0

Я проверил код :) код завершен, обычно обычно не бывает :) –

+0

Спасибо :), Если бы я мог проголосовать за это! – Joe1992

0
  1. Validation в контроллере, , например:

    $ пост = Post :: найти ($ post_id);

    если (! Isset ($ post)) {
    abort (404);
    }

  2. Использование FindOrFail, , например:

    try 
    { 
        $post = Post::FindOrFail($id) 
    } 
    
    catch (NotFoundHttpException $e) 
    { 
        abort(404); 
    } 
    

для View, Laravel использовать мнения/ошибки/404.blade.php
вы можете настроить его, как вы хотите.

Смежные вопросы