有没有办法在Controller Action之前访问Laravel Route参数?

时间:2014-09-05 19:12:59

标签: php laravel laravel-4 routing

我正在使用Laravel 4编写api,其中一部分URL将确定从哪个数据库中提取数据。将存在大量具有相同模式的数据库,例如:

mystuff_arizona
mystuff_florida
...

这是给定的(我必须要处理的要求)。

以下网址(通过id'显示'资源)......

www.mysite.com/arizona/api/v1/items/9

www.mysite.com/florida/api/v1/items/9

可以使用相同的控制器,但我需要在Laravel中添加一些代码(在基本控制器或'之前'函数中),以根据URL设置正确的数据库连接。

我一直在做这样的事情:

Route::group(['prefix' => '{state}/api'], function($state=null)
{
    Route::group(['prefix' => 'v1'], function()
    {
        Route::resource('items', 'ItemsController');
    });
});

但是,在我的控制器中,我需要将$ state参数添加到show()方法中,尽管我不打算在那里使用它。

//public function show($state,$id) // <<-- this works
public function show($id) // <<-- this fails
{
    $record = Item::findOrFail($id);
    return Response::json( $record->toArray()) );
}

我的问题是:

1)有没有办法在调用'show'之前从路径访问$ state参数(在基本控制器中或在Controller的'before'方法中)?

2)有没有办法告诉show()和update()资源方法忘记$ state参数?

我可以使用本机PHP来做到这一点我很确定,但我想知道Laravel是否有一些预先构建的功能可以在这里提供。

1 个答案:

答案 0 :(得分:3)

您可以使用路由过滤器

Route::filter('name', function()
{
    $routeParameters = Route::getCurrentRoute()->getParameters();
    $state = $routeParameters['state'];
    Route::getCurrentRoute()->setParameters($routeParameters);

    // Do something with $state

});