我正在使用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是否有一些预先构建的功能可以在这里提供。
答案 0 :(得分:3)
您可以使用路由过滤器
Route::filter('name', function()
{
$routeParameters = Route::getCurrentRoute()->getParameters();
$state = $routeParameters['state'];
Route::getCurrentRoute()->setParameters($routeParameters);
// Do something with $state
});