2016-08-23 2 views
1

Мне интересно, если это возможно, бросить обычное исключение, когда на каком-то условии/запросе Laravel's Eloquent model не найден?Как переопределить исключение ModelNotFoundException в ярких моделях Laravel?

Например, если у меня есть модель Page, как я могу сбросить свой обычай, исключение PageNotFound?

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Page extends Model { 
} 

Эта модель будет бросать ModelNotFoundException с данным сообщением:

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

Чтобы ответить на заданный вами вопрос, вы можете буквально переопределить методы 'findOrFail' и' firstOrFail' в каждой модели и вместо того, чтобы бросать «ModelNotFoundException», вы можете выбросить все, что захотите. Однако, как упоминалось в ответе Тони, вы можете просто называть '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); 
     } 

EDIT
Как только вы поймаете ModelNotFoundE xception, вы можете позвонитьgetModel(), чтобы получить имя класса модели.

+0

Да, я знаю, как «обрабатывать» исключения, Но у меня разные модели, такие как «Страница», «Почта» и т. Д. Как узнать (без разбора $ e> getMessage() исключения ModelNotFound), которая Model не был найден? Что я прошу, как бросить мое собственное исключение, когда модель не найдена? Я мог бы сделать в моем контроллере, чтобы проверить, возвратил ли запрос какие-либо результаты, и после этого исключить исключение или просто делать то, что я хочу сделать, но нет ли каких-либо простых решений для моего вопроса? –

+0

просто вызовите getModel() на объекте ModelNotFoundException. См. Мой метод редактирования –

+0

$ e> getModel() - это тот, который я не знал об этом. Это действительно не отвечало на мой вопрос, но это намного лучший способ, но я делал это раньше. Благодаря! –

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