这篇文章主要给大家介绍了关于Laravel中重写资源路由自定义URL的实现方法,需要的朋友可以参考下
前言
本文主要给大家介绍了关于Laravel中重写资源路由自定义URL的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
重写原因
近期在使用Laravel开发项目过程中,为了简化路由代码使用了Laravel的资源路由,Route::resource('photo', 'PhotoController');
在默认情况下,Laravel生成的路由表如下:
| 动作 | 路径 | Action | 路由名称 |
|---|---|---|---|
| GET | /photo | index | photo.index |
| GET | /photo/create | create | photo.create |
| POST | /photo | store | photo.store |
| GET | /photo/{photo} | show | photo.show |
| GET | /photo/{photo}/edit | edit | photo.edit |
| PUT/PATCH | /photo/{photo} | update | photo.update |
| DELETE | /photo/{photo} | destroy | photo.destroy |
为了满足项目需求,需将/photo/{photo}/edit 路径改为 /photo/edit/{photo}
实现步骤
查询了Laravel源码,发现此路径生成的方法在Illuminate\Routing\ResourceRegistrar.php类中,我们需重写此类的addResourceEdit方法即可。
重写addResourceEdit方法
创建新类 \App\Routing\ResourceRegistrar.php,代码如下:
namespace App\Routing; use Illuminate\Routing\ResourceRegistrar as OriginalRegistrar; class ResourceRegistrar extends OriginalRegistrar { /** * Add the edit method for a resourceful route. * * @param string $name * @param string $base * @param string $controller * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceEdit($name, $base, $controller, $options) { $uri = $this->getResourceUri($name).'/'.static::$verbs['edit'].'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'edit', $options); return $this->router->get($uri, $action); } }
在AppServiceProvider中注册这个类
public function boot() { //重写资源路由 $registrar = new \App\Routing\ResourceRegistrar($this->app['router']); $this->app->bind('Illuminate\Routing\ResourceRegistrar', function () use ($registrar) { return $registrar; }); }
最后使用Route::resource('photo', 'PhotoController');生成的路由就满足需求了。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Introduction aux composants Laravel
Introduction au middleware Laravel
Quels sont les modèles de conception utilisés par Laravel ?
Lequel est le plus simple, thinkphp ou laravel ?
Quel système est Android
Quelles sont les nouvelles fonctionnalités de Hongmeng 3.0 ?
chaîne js en tableau
Comment fermer le port 445