将帐户令牌添加到路由
Add Account token to routing
我正在尝试向 Silex 路由添加一个帐户。我的目标是拥有如下路线:
/{_account}/{_locale}/
/{_account}/{_locale}/products
/{_account}/{_locale}/block
您可以找到我的代码 here on github. It's a small sample. I can read the account token from the request and save the Account in the AccountListener。
我尝试像 _locale
一样处理 _account
。一旦设置或更新应用程序就不必为此操心。这意味着如果我调用 $app['url_generator']->generate('blog')
.
将自动设置 _account
参数
这是我目前的问题。我不知道如何通知 UrlGenerator 设置这些参数。
也许我的做法是完全错误的。
我希望你能给我发一些例子或食谱之类的。或者合并请求。
UrlGenerator 使用 request_context
中的参数(如您所见 in the code),因此您可以在监听器中设置这些参数。
src/app.php
$dispatcher = $app['dispatcher']->addSubscriber(
new AccountListener(
new AccountRepository(),
$app['request_context'],
$app['monolog']
)
);
SilexLab\Listener\AccountListener
public function __construct(
AccountProvider $accountProvider,
RequestContext $requestContext,
Logger $logger
) {
//...
$this->requestContext = $requestContext;
}
public function onKernelRequest(GetResponseEvent $event)
{
//...
$request->attributes->set('_account', $account);
$this->requestContext->setParameter('_account', $account);
}
我正在尝试向 Silex 路由添加一个帐户。我的目标是拥有如下路线:
/{_account}/{_locale}/
/{_account}/{_locale}/products
/{_account}/{_locale}/block
您可以找到我的代码 here on github. It's a small sample. I can read the account token from the request and save the Account in the AccountListener。
我尝试像 _locale
一样处理 _account
。一旦设置或更新应用程序就不必为此操心。这意味着如果我调用 $app['url_generator']->generate('blog')
.
_account
参数
这是我目前的问题。我不知道如何通知 UrlGenerator 设置这些参数。
也许我的做法是完全错误的。
我希望你能给我发一些例子或食谱之类的。或者合并请求。
UrlGenerator 使用 request_context
中的参数(如您所见 in the code),因此您可以在监听器中设置这些参数。
src/app.php
$dispatcher = $app['dispatcher']->addSubscriber(
new AccountListener(
new AccountRepository(),
$app['request_context'],
$app['monolog']
)
);
SilexLab\Listener\AccountListener
public function __construct(
AccountProvider $accountProvider,
RequestContext $requestContext,
Logger $logger
) {
//...
$this->requestContext = $requestContext;
}
public function onKernelRequest(GetResponseEvent $event)
{
//...
$request->attributes->set('_account', $account);
$this->requestContext->setParameter('_account', $account);
}