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

时间:2014-03-22 18:16:04

标签: 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'));

并将它们组合成一条路线。因为控制器是一样的。

所以当你去索引" /"时,这个控制器将处于活动状态。和" create_content"。

如果我已经在这里 - 也许有人可以为我详细说明" as"在阵列?

谢谢!

2 个答案:

答案 0 :(得分:3)

在Laravel中,您不仅限于路径的静态值。您也可以使用{}来表示变量。添加一个?变量名后使该变量可选。这些变量将传递给您的路由方法(在本例中为"创建" SameController方法)。

这可以与where方法相结合,以实现您想要的效果。 where方法允许您定义RegEx对变量允许的限制。

另一种选择是使用Route :: pattern,它基本上是一个更全面的" where()的版本。为方便起见,我列举了两个例子。 :)

至于' as',您可以在Laravel中命名路线。在用'作为'命名路线后,您可以通过Laravel的一些有用功能访问它,例如URL :: route(' nameOfRoute')或Redirect :: route (' nameOfRoute&#39);

一个有效的例子如下:

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');
});

答案 1 :(得分:0)

尽管您无法避免该代码,但由于以下原因。 因为它是同一个控制器的相同路由,所以请求仍然不同。

所以我认为你有两种选择......

1)使用上面的代码

2)破解你的.htaccess文件并将其重定向到/当请求为create_content时

相信我,第一个是最简单的方式。

你需要问的问题是,我是否需要第二条路线。是否存在像url那样传播到内容的内容?如果不是那么多,我会完全抛弃第二个。