Php 拉威尔:可以';如果手动输入路由/url,则看不到404
构建laravel应用程序(博客/帖子)。 在查看任何特定帖子(通过slug)时,url如下所示Php 拉威尔:可以';如果手动输入路由/url,则看不到404,php,laravel,Php,Laravel,构建laravel应用程序(博客/帖子)。 在查看任何特定帖子(通过slug)时,url如下所示 http://localhost:8000/post/corporate-world-1 function post($slug) { $post = Post::where('slug', $slug)->first(); // This is probably missing if (!$post) { abort(404
http://localhost:8000/post/corporate-world-1
function post($slug) {
$post = Post::where('slug', $slug)->first();
// This is probably missing
if (!$post) {
abort(404);
}
return view('show', ['post' => $post]);
}
所以如果有人把任何随机的子弹
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)
您可以向路由添加中间件
Route::get('post/{post}', PostController@show)->middleware('checkPost');
在kernel.php中
'checkPost' => \Illuminate\Routing\Middleware\CheckPostMiddleware::class,
在中间件中,检查url是否包含有效的post else
return abort(404);
您可以向路由添加中间件
Route::get('post/{post}', PostController@show)->middleware('checkPost');
在kernel.php中
'checkPost' => \Illuminate\Routing\Middleware\CheckPostMiddleware::class,
在中间件中,检查url是否包含有效的post else
return abort(404);
这是因为您没有在控制器中处理404。在没有看到控制器的代码的情况下,我只能假设控制器试图从数据库中获取一个不存在的slug的内容,返回null,但是您仍然将从数据库获取的对象传递给视图。您需要测试对象是否存在,如果不存在,则返回404。它看起来像这样
http://localhost:8000/post/corporate-world-1
function post($slug) {
$post = Post::where('slug', $slug)->first();
// This is probably missing
if (!$post) {
abort(404);
}
return view('show', ['post' => $post]);
}
这是因为您没有在控制器中处理404。在没有看到控制器的代码的情况下,我只能假设控制器试图从数据库中获取一个不存在的slug的内容,返回null,但是您仍然将从数据库获取的对象传递给视图。您需要测试对象是否存在,如果不存在,则返回404。它看起来像这样
http://localhost:8000/post/corporate-world-1
function post($slug) {
$post = Post::where('slug', $slug)->first();
// This is probably missing
if (!$post) {
abort(404);
}
return view('show', ['post' => $post]);
}
向我们展示控制器和
Show.blade.php
code。向我们展示控制器和Show.blade.php
代码。非常感谢!作为一个新手,我错过了这个愚蠢的事情!编辑页面需要完全相同的代码,因此应该使用中间件解决方案以避免重复代码@拉维瓦瓦尼奥凯。非常感谢@Tiago_nes我会记住你的建议并利用中间工具:)完成@蒂亚戈真的非常感谢!作为一个新手,我错过了这个愚蠢的事情!编辑页面需要完全相同的代码,因此应该使用中间件解决方案以避免重复代码@拉维瓦瓦尼奥凯。非常感谢@Tiago_nes我会记住你的建议并利用中间工具:)完成@蒂亚戈内斯