我正在创建一个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
项中的变量?
答案 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
课程中保留过滤模式,这样他们就不会在我的路线文件中乱丢,然后很乐意听取你的意见。