Как вывести ошибку о не существующий записи в бд?

рут Route::get('/post/{id}', 'PostController@getPost');

Model
<?php namespace App\models;

use Illuminate\Database\Eloquent\Model;
use PhpSpec\Exception\Exception;

class Post extends Model
{
    public static function get($id)
    {
        try {
            $post = Post::where('id', '=', $id)->firstOrFail();
        } catch (Exception $e) {
            return $e;
        }
        return $post;
    }
}

Controller 
<?php namespace App\Http\Controllers;

use App\Models\Post;
use Psy\Exception\Exception;
class PostController extends Controller
{

    public function getPost(Exception $id)
    {

        $id = (int)$id;
        $post = Post::get($id);
        if ($post instanceof CustomException) {
            return "error";
        }
        return view('post.showPost', ['post'=>$post]);
    }
}

Хочу выдать ошибку на не существующею запись в бд по id, но вместо моей ошибки Error срабатывает дебагер - Whoops, looks like something went wrong.

1/1
ModelNotFoundException in Builder.php line 151:
No query results for model [App\models\Post].
  • Вопрос задан
  • 761 просмотр
Пригласить эксперта
Ответы на вопрос 1
AmdY
@AmdY
PHP и прочие вебштучки
Зачем вам ловить
use PhpSpec\Exception\Exception
 } catch (Exception $e) {
при промохе бросается 
Illuminate\Database\Eloquent\ModelNotFoundException

Да и остальной код странный getPost(Exception $id) - почему контроллер принимает исключение в качестве параметра
public static function get($id) - не надо использовать статику, laravel через фасад вызовет метод объекта
соотвественно строка
$post = Post::where('id', '=', $id)->firstOrFail();
превращается в
return $this->findOrFail($id);
ну и далее не понятно, зачем вообще плодить этот метод, зачем ловить исключение в контроллере и т.д.
Стоит так же попробовать биндинг моделей к ротингу...

Вобщем, советую внимательно перечитать документацию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы