Laravel 5通配符子域+路由模型绑定

时间:2015-04-24 10:27:44

标签: php laravel

因此,当您在通配符子域组路由中定义资源控制器时,类似于:

Route::group(array('domain' => '{subdomain}.example.com'), function() {
  Route::resource('users', 'UserController');
});

在RouteServiceProvider上

$router->model('user', 'App\User');

并在UserController上显示方法:

public function show($user)
{
    return $user;
}

我得到的是子域名而不是用户资源。这是因为subdomain参数传递给控制器​​方法,我必须像这样更改它们:

public function show($subdomain, $user)
{
    return $user;
}

我根本不想将subdomain参数添加到我的应用程序中的每个控制器方法,因为我不会对它做任何事情。我在中间件中使用subdomain参数来进行一些配置更改。

我怎么能这样做,所以子域不会作为参数传递给控制器​​?

2 个答案:

答案 0 :(得分:0)

在你的控制器功能中你可以忽略$ dubdomain,如果你不使用它,并确保你输入像这样的用户

public function show(User $user)
{
    return $user;
}

答案 1 :(得分:0)

我知道这个问题有些古老(并且可能是过时的),尽管我在寻找另一个路由模型绑定问题的答案时偶然发现了这篇文章。

为避免需要子域,可以指定Laravel忘记该route参数。

您可以在中间件(也检查子域)中执行此操作,如下所示:

$request->route()->forgetParameter('subdomain');

或者,使用您的代码段,它看起来像这样:

Route::group(array('domain' => '{subdomain}.example.com'), function() {
  Route::forgetParameter('subdomain');
  Route::resource('users', 'UserController');
});

但是,我强烈建议将该过程移入中间件,因为将其放入路由文件中感觉不对。