未触发域密钥的Laravel路由服务提供商

时间:2015-02-19 13:53:38

标签: laravel routing laravel-5 service-provider

我正在创建一个SaaS应用程序(谁不是?)和大多数SaaS应用程序一样,我采用了帐户子域方法。我的路线文件如下所示:

$router->group(['domain' => '{account}.example.com'], function($router)
{
    $router->get('/', function()
    {
        return response('Hello, world.');
    });
});

然后我决定在我的RouteServiceProvider文件中添加一些路由参数验证和绑定:

public function boot(Router $router)
{
    parent::boot($router);

    $router->pattern('account', '[a-z0-9]+');

    $router->bind('account', function($subdomain)
    {
        return Account::whereSubdomain($subdomain)->firstOrFail();
    });
}

然而,实际上似乎没有触发这些。我知道这一点,因为我可以在dd('here?')调用中添加类似bind的内容,而且它永远不会触发。我还可以将account模式过滤器缩小为[0-9]+,如果我在子域中包含字母,它仍然会匹配。

我做错了什么?如何获取路由模式和绑定以处理路由组的domain项中的变量?

1 个答案:

答案 0 :(得分:0)

结果移动任何绑定到map方法(而不是boot)方法都有效,并且模式过滤器需要进入路由组定义,如下所示:

$router->group(['domain' => '{account}.example.com'], function($router)
{
    $router->pattern('account', '[a-z0-9]+');

    $router->get('/', function()
    {
        return response('Hello, world.');
    });
});

不理想,所以任何人都知道如何在我的RouteServiceProvider课程中保留过滤模式,这样他们就不会在我的路线文件中乱丢,然后很乐意听取你的意见。