Laravel Route ::资源命名

时间:2014-07-08 21:36:00

标签: php laravel

我的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'));

3 个答案:

答案 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

下的

Documented here