symfony:没有用户文化的统一网址

时间:2011-11-07 14:42:42

标签: symfony1 routing symfony-1.4

我正在考虑与我所在地区提供支付网关服务的商家合作的可能性。 特定商家使用“付款页面”概念,即我的网站的特定uri,例如http://www.mysite.com/culture1/cart/index将从商家方授权,以便继续用户的付款。

我的网站是使用symfony 1.4构建的,并且支持i18n,所以我的所有路由都将文化嵌入到网址中(/:sf_culture /...)

culture1(默认值):

http://www.mysite.com/culture1/cart/index

代表culture2

http://www.mysite.com/culture2/cart/index

但是,如果付款来自第二个网址,则只会失败商家网站的授权。

那么,symfony中是否有任何方法可以通过保持用户文化的同时为特定模块中的特定操作创建统一URL(使用路由)而无需嵌入文化信息?

在这种情况下,目标是使用以下网址授权:

http://www.mysite.com/cart/index

2 个答案:

答案 0 :(得分:2)

不确定。您只需在没有routing.yml的情况下将其添加到:sf_culture即可。文化保留在用户的属性上。因此,只有在您更改语言和SEO时才需要:sf_culture

答案 1 :(得分:1)

以文化为例:

contacts:  
  url:   /:sf_culture/contacts
  param: { module: static, action: contacts }
  requirements: { sf_culture: (?:uk) } 

没有文化的相同溃败:

contacts:  
  url:   /contacts
  param: { module: static, action: contacts }

在以下情况下为每个用户设置默认文化:

    homepage:
      url: /
      param: { module: static, action: about}
      requirements: { sf_culture: (?:uk }

    localized_homepage:
      url: /:sf_culture
      param: { module: static, action: about}
      requirements: { sf_culture: (?:uk) }

apps/frontend/modules/static/action.class.php

    public function executeAbout(sfWebRequest $request)
  {


   if (!$request->getParameter('sf_culture'))
        {
        if ($this->getUser()->isFirstRequest())
            {
            $culture = $request->getPreferredCulture(array('uk'));
            $this->getUser()->setCulture($culture);
            $this->getUser()->isFirstRequest(false);
            }
        else
            {
            $culture = $this->getUser()->getCulture();
            }

            $this->redirect('localized_homepage');
        }
  }

// apps / frontend / lib / myUser.class.php

public function isFirstRequest($boolean = null)
{
  if (is_null($boolean))
  {
    return $this->getAttribute('first_request', true);
  }

  $this->setAttribute('first_request', $boolean);
}

如果用户输入的链接不包含任何文化,那么重要的是,它之前已确定。试试吧)

您还可以设置文化:

$this->getUser()->setCulture('uk');

<强>更新

如果请求中不存在sf_culture变量,则表示用户已访问/ URL。如果是这种情况并且会话是新的,则首选文化将用作用户文化。否则,将使用用户当前的文化。

来自Jobeet教程。(click