Php laravel 4-到同一控制器的多条路由

Php laravel 4-到同一控制器的多条路由,php,laravel,controller,laravel-4,Php,Laravel,Controller,Laravel 4,我试图避免这种代码: Route::get('/', array('as' => 'create_content', 'uses' => 'SameController@create')); Route::get('create_content', array('as' => 'create_content', 'uses' => 'SameController@create')); 并将它们组合成一条路线。因为控制器是相同的 因此,当您转到索引“/”和“创建内容”时,

我试图避免这种代码:

Route::get('/', array('as' => 'create_content', 'uses' => 'SameController@create'));
Route::get('create_content', array('as' => 'create_content', 'uses' => 'SameController@create'));
并将它们组合成一条路线。因为控制器是相同的

因此,当您转到索引“/”和“创建内容”时,此控制器将处于活动状态

如果我已经在这里了,也许有人可以为我详细说明数组中“as”的用途


谢谢

尽管由于以下原因,您无法避免该代码。 由于到同一控制器的路由相同,因此请求仍然不同

所以我认为你有两个选择

1) 按照上面的代码

2) 黑客攻击你的.htaccess文件,并在请求创建内容时将其重定向到/

相信我,第一种方法是最简单的


你需要问的问题是,我需要第二条路线吗。是否有内容像url一样传播到该位置?如果没有那么多,我会完全放弃第二个。

在Laravel中,您的路径不局限于静态值。还可以使用{}来表示变量。添加一个?在变量名之后,使该变量成为可选变量。这些变量被传递给路由方法(在本例中,是SameController的“create”方法)

这可以和where方法结合起来实现您想要的功能。where方法允许您对变量允许的内容定义正则表达式限制

另一种选择是使用Route::pattern,它基本上是where()的一个更“全局”的版本。为了您的方便,我提供了这两种方法的一个示例。:)

至于“As”,你可以在拉威尔命名一条路线。在使用“as”命名路由之后,您可以通过Laravel的一些有用函数来访问它,例如URL::route(“nameOfRoute”)或Redirect::route(“nameOfRoute”)

下面是一个运行示例:

Route::pattern('myPattern', '(create_content)?');

Route::get('/{path?}', array('as' => 'nameOfRoute', 'uses' => 'SameController@create')
)->where('path', '(create_content)?');

// This is functionally equivalent to the above Route::get.
// Route::get('/{myPattern?}', array('as' => 'nameOfRoute', 'uses' => 'SameController@create')
// );

// Example of how to make use of the 'as' defined above.
Route::get('create_more_content', function() {
    return Redirect::route('nameOfRoute');
});

谢谢你的评论!我只是看到一些像我想做的事情被用在了老教程中(我相信是l3),所以我确信在l4中有一个很好的方法。Route::get('/,new_content',array(…在l4中它对我不起作用。但是根据教程(tuts plus 29保存和显示片段),我相信它在l3中起作用。这就是api中的内容…public Route get(string$uri,Closure | array | string$action),所以你似乎必须给出一个字符串,然后是一个数组,所以我认为这是不受支持的。这是一个很好的解决方案,IMO和
as
使用指定给
as
的路由,因此你可以使用路由名称来引用该路由,比如:
route('create_content')
而不是
to('/')