Laravel: не вижу 404, если маршрут / URL введены вручную - PullRequest
0 голосов
/ 28 июня 2018

Создание приложения laravel (блог / посты). При просмотре любого конкретного сообщения (через слаг), URL-адрес выглядит следующим образом

http://localhost:8000/post/corporate-world-1

Так что, если кто-то поставит какую-нибудь случайную пулю,

http://localhost:8000/post/jajdajkjknjfna

это не показывает 404, вместо этого это как:

ErrorException (E_ERROR)
Trying to get property 'post_image' of non-object (View: C:\xampp\htdocs\blogsnposts\resources\views\post\show.blade.php)

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это потому, что вы не обрабатываете 404 в вашем контроллере. Не видя код контроллера, я могу только предположить, что контроллер пытается извлечь контент из базы данных с несуществующим слагом, возвращает ноль, но затем вы все равно передаете объект, извлеченный из базы данных, представлению. Вам нужно проверить, существуют ли объекты, и вернуть 404, если это не так. Это будет выглядеть примерно так

function post($slug) { 
       $post = Post::where('slug', $slug)->first();
       // This is probably missing
       if (!$post) {
           abort(404);
       }
       return view('show', ['post' => $post]);
}
0 голосов
/ 28 июня 2018

Вы можете добавить промежуточное ПО к маршруту.

Route::get('post/{post}', PostController@show)->middleware('checkPost');

в kernel.php

'checkPost' => \Illuminate\Routing\Middleware\CheckPostMiddleware::class,

В промежуточном программном обеспечении вы проверяете, содержит ли URL правильный пост, иначе

return abort(404);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...