Laravel 没有为域密钥触发路由服务提供商
Laravel route service provider not triggered for domain key
我正在创建一个 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();
});
}
然而,这些似乎并没有真正被触发。我知道这一点,因为我可以在 bind
调用中放入类似 dd('here?')
的内容,并且它永远不会被触发。我还可以将我的 account
模式过滤器减少到 [0-9]+
之类的东西,如果我在子域中包含字母,它仍然会被匹配。
我做错了什么?如何获取路由模式和绑定以处理路由组的 domain
键中的变量?
原来将任何绑定移动到 map
方法(而不是 boot
)方法是有效的,模式过滤器需要进入路由组定义,如下所示:
$router->group(['domain' => '{account}.example.com'], function($router)
{
$router->pattern('account', '[a-z0-9]+');
$router->get('/', function()
{
return response('Hello, world.');
});
});
不理想,所以任何人都知道如何将过滤器模式保存在我的 RouteServiceProvider
class 中,这样它们就不会乱扔在我的路由文件中,然后很想听听您的意见。
我正在创建一个 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();
});
}
然而,这些似乎并没有真正被触发。我知道这一点,因为我可以在 bind
调用中放入类似 dd('here?')
的内容,并且它永远不会被触发。我还可以将我的 account
模式过滤器减少到 [0-9]+
之类的东西,如果我在子域中包含字母,它仍然会被匹配。
我做错了什么?如何获取路由模式和绑定以处理路由组的 domain
键中的变量?
原来将任何绑定移动到 map
方法(而不是 boot
)方法是有效的,模式过滤器需要进入路由组定义,如下所示:
$router->group(['domain' => '{account}.example.com'], function($router)
{
$router->pattern('account', '[a-z0-9]+');
$router->get('/', function()
{
return response('Hello, world.');
});
});
不理想,所以任何人都知道如何将过滤器模式保存在我的 RouteServiceProvider
class 中,这样它们就不会乱扔在我的路由文件中,然后很想听听您的意见。