Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔:可以';如果手动输入路由/url,则看不到404_Php_Laravel - Fatal编程技术网

Php 拉威尔:可以';如果手动输入路由/url,则看不到404

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

构建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);
       }
       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我会记住你的建议并利用中间工具:)完成@蒂亚戈内斯