在Laravel 4应用程序中,我使用子域路由围绕一堆Route :: resource这样:
Route::group(['domain' => '{account}.my.app'], function()
{
Route::group(['before' => 'auth'], function($account)
{
Route::resource('organisations', 'OrganisationsController');
Route::resource('clients', 'ClientsController');
Route::resource('domains', 'DomainsController');
});
});
在我的身份验证过滤器中,我执行以下操作:
Route::filter('auth', function($route)
{
// you could now access $account in a controller if it was passed as an argument to the method
$account = $route->getParameter('account');
// share account variable with all views
View::share('account', $account);
// Auth::guest Returns true if the current user is not logged in (a guest).
if (Auth::guest()) return Redirect::guest('login');
});
在我的观看中,我现在可以访问$account
,但如果我希望URL::route()
的来电正确,我必须手动传递帐户变量,例如URL::route('clients.show',['account' => $account])
,否则会生成网址比如%7Baccount%7D.my.app
。
这有点痛苦,看起来并不优雅,有没有其他或更好的方法来实现这一目标?我想我可以创建自己的路径助手而不是内置的路径助手。 但是,我也在控制器中使用Redirect :: route()重定向,所以我还需要在这里进行更新。
修改
正如评论中所建议的,扩展Route API可能是最好的方法。有没有人有任何建议如何做到这一点?
感谢。