我的routes.php
中有以下内容Route::resource('g', 'GameController');
我通过HTML::linkRoute('g.index', 'Title', $slug)
链接到这些生成的路线,这会产生指向http://domain/g/demo-slug
我要做的是验证是否可以在一个地方声明前缀,因此如果要更改URL结构,我不会寻找链接。
例如,我想将http://domain/g/demo-slug
更改为http://domain/video-games/demo-slug
我希望在标准路由中使用类似的功能,但这似乎不适用于资源路由。
Route::get('/', array('as' => 'home', 'uses' => 'HomeController@getUpdated'));
答案 0 :(得分:1)
据我所知,您不能为资源控制器命名路由(需要引用),但您可以使用带有前缀的Route::group()
将它们包含在公共空间中。您甚至可以提供命名空间,这意味着您可以快速地将整个API替换为另一个API。
Route::group(array(
'prefix' => 'video-games',
'before' => 'auth|otherFilters',
'namespace' => '' // Namespace of all classes used in closure
), function() {
Route::resource('g', 'GameController');
});
<强>更新强>
看起来资源控制器在内部被赋予名称,这是有意义的,因为它们在内部由名称而不是URL引用。 (php artisan routes
,你会看到给资源路线的名字。)
这可以解释为什么你不能命名,或者事实证明实际情况是这样,重命名资源路线。
我猜你可能不是在寻找这个,但Route:group
是保留资源集合和公共共享前缀的最佳选择,但是你的网址需要保持硬编码。
答案 1 :(得分:1)
Route :: group()采用'前缀'。如果你把Route :: resource()放在里面,那应该可以。
Tangent,我发现这读起来更好:
Route::get('/', array('uses' => 'HomeController@getUpdated', 'as' => 'home'));
答案 2 :(得分:0)
您可以使用以下语法为资源路由指定自定义名称
Resource::route('g', 'GameController', ['names' => [
'index' => 'games.index',
'create' => 'games.create',
...
]])
这意味着即使您决定将网址格式更改为其他内容,也可以在视图中使用{!! route('games.index') !!}
。
Named resource routes
下的