如何从拉拉维尔的资源控制器中删除 show() 函数



我的Laravel项目中有资源控制器。

路线

Route::resource('products', 'ProductsController');

在产品控制器中,我不想使用show($id)函数,因为我的项目中不需要这个函数。
当我点击URL属于此控制器时,它会抛出BadController错误。
网址示例:http://localhost/My-Project/products/123
此 URL 直接调用 show(( 函数,但我删除了该函数以提高编码标准。但是,当任何用户直接点击该URL时,它就会抛出错误。

如果有人直接调用该 URL,它应该抛出 404 页面未找到。

是的,我可以通过在show((函数中重定向或其他操作来处理URL请求,但我不想在我的项目中使用不必要的函数。

有没有办法在没有该功能的情况下抛出找不到的 404 页面?

可以为资源控制器提供要注册的操作子集:

Route::resource('products', 'ProductsController', [
'only' => ['index', 'create', 'store']
]);

这样,您可以显式设置要注册的路由。

如有疑问,请使用php artisan route:list查看应用程序中注册了哪些路由。

show放在except里面。

Route::resource('products', 'ProductsController', [
'except' => [ 'show' ]
]);

它不会注册products.show路由,因此会引发异常。

因此,第一种选择是通过将以下代码添加到app/Exceptions/Handler.php来处理异常:

use SymfonyComponentHttpKernelExceptionMethodNotAllowedHttp‌​Exception;
...
...
public function render($request, Exception $e) 
{
if ($e instanceof MethodNotAllowedHttpException) {
abort(404);
}
return parent::render($request, $e);
}

然后编辑resource/views/erros/404.blade.php以个性化页面。

或者第二个选项是在路由文件末尾定义完整的路由捕获,以显示 404 到未定义的路由。

// Catch all undefined routes (place at the very bottom)
Route::get('{slug}', function() {
return view('errors.404');
})->where('slug', '([A-Za-z0-9-/]+)');

最新更新