为了账号安全,请及时绑定邮箱和手机立即绑定

拉拉维尔以干净的方式排除足智多谋的功能

拉拉维尔以干净的方式排除足智多谋的功能

PHP
交互式爱情 2022-09-17 21:25:41
目前,我的文件中有这4条资源丰富的路线。web.phpRoute::resource('campaigns', 'CampaignController')->except(['show']);Route::resource('users', 'UserController')->except(['show']);Route::resource('models', 'ModelController')->except(['show']);Route::resource('trims', 'TrimController')->except(['show']);我不禁想知道。难道我不能向函数中添加一些东西来使它以这种方式运行吗?这是因为它们都有一个共同点。他们的方法。Route::resourcesexcept()show()它想要这样的东西。(此示例不起作用,因为 没有方法。resources()except()Route::resources([    'campaigns' => 'CampaignController',    'users' => 'UserController',    'models' => 'ModelController',    'trims' => 'TrimController'])->except(['show']);
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

这个问题已经很老了,但我只是面对同样的问题,并以这种方式解决它:


Route::resources([

    'campaigns' => 'CampaignController',

    'users' => 'UserController',

    'models' => 'ModelController',

    'trims' => 'TrimController'

], [

    'except' => ['show']

    // you can set here other options e.g. 'only', 'except', 'names', 'middleware'

]);

根据源代码,方法不可链接,因为它返回 。但是,您仍然可以将选项传递到 的第二个参数中。resourcesvoidresources


这是“拉雷尔方式”,您没有覆盖任何供应商代码。


在这里挖掘以获取更多信息,它是如何工作的。


请注意,如果要排除方法,但尝试在浏览器中访问(HTTP ),路由器将抛出错误。发生这种情况是因为路由器仍然具有此路由,但对于 、 和 。然后您的应用程序崩溃。show/users/{user}GETThe GET method is not supported for this route. Supported methods: PUT, PATCH, DELETE.PUTPATCHDELETE


因此,如果有人不小心转到“显示”页面,也许您希望显示HTTP 404。我更喜欢添加后备路由(这应该是你的路由的最后一个路由!)


Route::fallback(function () {

    abort(404);

});


查看完整回答
反对 回复 2022-09-17
?
千巷猫影

TA贡献1829条经验 获得超7个赞

您可以编写自己的类来扩展和实现您的方法,如下所示:Illuminate\Routing\Routeresources


namespace App\Extends;


class Route extends Illuminate\Routing\Route {


   public function resources($routes, array $excepts) {

     foreach ($routes as $key => $value){

         $this->resource($key, $value)->except($excepts);

     }

   }


}

之后,您需要在服务提供程序中绑定类,如下所示:


public function register()

{

    $this->app->bind('Illuminate\Routing\Route', 'App\\Extends\\Route');

}

并呼叫网络.php如下所示:resources


Route::resources([

    'campaigns' => 'CampaignController',

    'users' => 'UserController',

    'models' => 'ModelController',

    'trims' => 'TrimController'

], ['show']);

[编辑 1]


从 laravel.com/docs/5.8/controllers#resource-controllers


您可以通过将数组传递给 resources 方法一次注册多个资源控制器:


Route::resources([

    'photos' => 'PhotoController',

    'posts' => 'PostController'

]);

但我不知道你是否可以这样打电话->except(['show'])


Route::resources([])->except(['show'])


查看完整回答
反对 回复 2022-09-17
?
浮云间

TA贡献1829条经验 获得超4个赞

如果你谈论可能性,那么是的,正如上面提到的答案所提到的,这是可能的,但默认情况下你不能

看看这个文件,

/供应商/拉拉维尔/框架/src/照明/支持/立面/路线.php

 * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = [])
 * @method static void resources(array $resources)


查看完整回答
反对 回复 2022-09-17
  • 3 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信