从路径传递变量到控制器

时间:2016-05-16 06:54:13

标签: php laravel

我有这个route.php:

Route::group(['prefix' => 'v3/page1'], function()
{
    Route::get('page1', 'TestController@page1');
});

Route::group(['prefix' => 'v4/page1'], function()
{
    Route::get('page1', 'TestController@page1');
});

如您所见,有两组具有相同的路线。唯一的区别是每个组的前缀略有不同。

我需要一种方法将数据从路由传递到控制器。在这种情况下,我只对将“v3”或“v4”-string从路径传递给控制器​​感兴趣。

我已经阅读了一些关于before_filter的内容。但我不确定这是否是正确的方法。 我可以想象一个解决方案可能是提取url(可能在控制器的构造函数中),并从那里了解前缀是v3还是v4。但我想知道是否有更好的方法,更多的是最佳实践。也许与before_filter有关?

3 个答案:

答案 0 :(得分:3)

您可以尝试以下内容:

Route::group(['prefix' => '{version}/page1'], function(){
    Route::get('page1', 'TestController@page1');
})->where('version', 'v[3|4]');

在您的控制器中,您可以按$request->version

获取版本

答案 1 :(得分:1)

Route::group(['prefix' => '{v}/page1'], function()
{
    Route::get('page1', 'TestController@page1');
});

&安培;在你的方法

public function page1($v) {}

https://laravel.com/docs/5.2/routing#route-parameters

了解详情

答案 2 :(得分:1)

我会像这样写

Route::group(['prefix' => '{version}'], function() 
{
    Route::get('page1', 'TestController@page1');
});

我不会传入前缀中的'page1',因为这意味着page1将在路由中显示两次。 在'page1($ version)'方法中,您应该能够获得该版本。 我没有测试过这个。