在URL中维护帐户上下文的最佳方法

时间:2015-12-28 19:37:19

标签: php symfony

对于我正在处理的应用,所有网址都在网址中包含当前帐号:

  • GET / 123456
  • GET / 123456 / catalog / products
  • GET / 123456 / catalog / products / blue-bear

我还有一些不需要了解当前帐户的网址:

  • GET / profile
  • GET / profile / accounts

我有一个事件监听器( Options -MultiViews RewriteEngine on RewriteCond %{THE_REQUEST} ^GET\ /+(.+)\.html [NC] RewriteRule ^ %1 [R=302,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^([^/]+)/?$ $1.html [L] )使用帐号从存储库中检索帐户,并将其设置为请求中的属性:

onKernelRequest

这允许我将帐户注入我的控制器操作:

$event->getRequest()->attributes->set('account', $account);

在同一个监听器中,我还在Router上下文中设置了account_number:

public function getAction(Account $account)
{
    $priceBook = $account->>getPriceBook();

    // ...
}

这允许我生成路线而不总是传递帐户:

$this->router->setParameter('account_number', $account->getAccountNumber());

我还在会话中设置了帐户来处理用户访问/个人资料页面的时间,并且n更长时间在URL中有account_number:

{{ path('app_product_get', { 'product_id': 123 }) }}

这是最好的方法吗?还是应该创建一个“保存”当前Account对象作为属性的服务?我在一个听众中做得太多了吗?

0 个答案:

没有答案