PHP默认路由,资源控制器:覆盖默认的路由名称和参数

Laravel 资源路由可以将典型的「CURD」路由指定到一个控制器上,仅需一行代码就可以实现,是一个非常神奇的工具。但是如果默认的方法不能 100% 的适用于你的需求,你需要覆盖它的话该怎么办呢?我们来看看你可以如何实现。

覆盖路由名称

我们可以通过下面的方法来声明一个资源路由:

Route::resource('article', 'ArticleController');

它会假定控制器包含了下面的方法:index()

create()

store()

edit()

update()

show()

destroy()

并且会为它们设置一个路由名称,如 article.create、article.show 等。

90f5813ab1c3a73e178878eef99394ab.png

那么,如果你想覆盖它们的话该怎么办呢?资源路由的第三个参数即可实现。

Route::resource('article', 'ArticleController', [

'names' => [

'show' => 'articles.display',

'store' => 'articles.save',

]

]);

此时我们再次查看路由列表,可以看到这两个路由的名称已经被修改:

5facbc37a75ae1b783e909aa337dc022.png

这时通过 route('article.save') 就能够调用到 ArticleController@store 方法了。

覆盖路由参数

资源控制器会给 show() 或 edit() 方法分配默认的参数。例如 Route::resource('article', 'ArticleController'); 生成的路由看起来是这样的:article/{article}。在控制器中你需要处理 $article 变量。如果出于某种原因,你需要使用 user_article 变量覆盖这个默认变量,你只需这么做:

Route::resource('article', 'ArticleController', [

'parameters' => [

'article' => 'user_article',

]

]);

65b39d942019bfac0c36d054e4799b6f.pngPS: 这里有个小坑,如果 articles 使用的复数形式,那么这里生成的路由参数将是articles/article,而非 articles/{user_article} 只有单数形式的时候才行。

其实上面的内容在文档中都有提到,可能大家没有注意到,到真正遇到这个问题的时候才需要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值