将帐户令牌添加到路由

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);
}