Laravel路由管理:Laravel 5.6中如何添加指定URL路由?
嘿,我来帮你搞定这个Laravel 5.6的路由配置问题!
你已经有了localhost:8000/admin/products的商品列表资源路由,现在要新增localhost:8000/admin/products/type的分类列表页,这里给你几个清晰可行的方案:
方案1:直接添加单独的GET路由(推荐,适合仅列表页需求)
如果分类只是需要一个列表展示,不需要完整的CRUD操作,直接写个GET路由最简洁:
$this->namespace('Products')->group(function () { // 保留原有的商品资源路由 $this->resource('products', 'IndexController'); // 新增商品分类列表路由,指定路由名称方便后续生成URL $this->get('products/type', 'TypeController@index')->name('products.type.index'); });
这里要注意:你的TypeController要放在app/Http/Controllers/Products目录下(因为命名空间是Products),在index方法里写分类列表的逻辑就行。后续要跳转或者生成这个URL的时候,直接用route('products.type.index')就可以了。
方案2:嵌套资源路由(适合后续要扩展分类CRUD的场景)
如果之后你想给分类加创建、编辑、删除等操作,用嵌套资源路由更规范:
$this->namespace('Products')->group(function () { $this->resource('products', 'IndexController'); // 仅启用index方法的嵌套资源路由,对应分类列表 $this->resource('products.type', 'TypeController')->only(['index']); });
这种方式生成的路由名称也是products.type.index,和方案1一致,后续要加其他方法的话,直接修改only数组或者去掉only限制即可。
方案3:用前缀+名称前缀的路由组(更规整的子路由管理)
如果你还想给商品加其他子路由(比如批量导出、筛选页等),可以用这种方式统一管理前缀和名称前缀:
$this->namespace('Products')->group(function () { $this->resource('products', 'IndexController'); // 统一给子路由加products前缀和products.的名称前缀 $this->name('products.')->prefix('products')->group(function () { $this->get('type', 'TypeController@index')->name('type.index'); // 后续加其他子路由直接在这里写就行,比如$this->get('export', 'ExportController@index')->name('export'); }); });
这种写法的好处是不用重复写products前缀和路由名称前缀,后续扩展更省心。
不管选哪种方案,记得对应的控制器要放在正确的命名空间目录下,不然会报找不到控制器的错误哦~
内容的提问来源于stack exchange,提问作者Justin Wastnage
相关产品推荐
相关产品推荐

