Symfony1 symfony:没有用户的统一url';文化
我正在考虑与我所在地区提供支付网关服务的商户合作的可能性。 特定商户使用“支付页面”概念,即我的网站的特定uri,例如Symfony1 symfony:没有用户的统一url';文化,symfony1,routing,symfony-1.4,Symfony1,Routing,Symfony 1.4,我正在考虑与我所在地区提供支付网关服务的商户合作的可能性。 特定商户使用“支付页面”概念,即我的网站的特定uri,例如http://www.mysite.com/culture1/cart/index将获得商户方的授权,以便继续进行用户付款 我的网站是用symfony 1.4构建的,支持i18n,因此我的所有路线都在url中嵌入了文化(/:sf_culture/…) i、 e对于文化1(默认值): 对于文化2: http://www.mysite.com/culture2/cart/index
http://www.mysite.com/culture1/cart/index
将获得商户方的授权,以便继续进行用户付款
我的网站是用symfony 1.4构建的,支持i18n
,因此我的所有路线都在url中嵌入了文化(/:sf_culture/…)
i、 e对于文化1
(默认值):
对于文化2
:
http://www.mysite.com/culture2/cart/index
但是,如果支付从第二个url开始,它将无法从商户网站获得授权
那么,在symfony中,有没有办法通过同时保留用户的区域性,为特定模块中的特定操作创建一个统一的url(使用路由),而无需嵌入区域性信息
在这种情况下,目标是使用以下url进行授权:
http://www.mysite.com/cart/index
当然。您只需将其添加到您的
routing.yml
,而不需要:sf\u文化。区域性保留在用户的属性上。因此,只有在您更改语言和SEO时才需要使用:sf_文化。例如:
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_区域性变量,则表示用户已到达/URL。如果是这种情况,并且会话是新的,则首选区域性将用作用户区域性。否则将使用用户的当前区域性
它来自Jobeet教程。(是。这就行了。非常感谢。顺便说一句,我不明白executeAbout
方法中else
语句的用途。请你详细说明一下好吗?也许我不够清楚:在我第一次评论中提到的地方,有一个$culture
变量被设置并且从未读取过……这有什么原因吗?$culture=$this->getUser()->getCulture()代码>这不一定,除非您希望获取当前用户区域设置并以某种方式使用它,例如在某个查询中,或者在视图中的某个位置。您也可以只做:$This->getUser()->setCulture($request->getPreferredCulture(array('uk'))代码>没关系。是的,你是对的。我还没有意识到在用户的会话属性中存在这个变量。您和调试工具栏对此进行了说明。然而,我认为丹尼斯281的回答是可以接受的,因为他更彻底、更详细。尽管如此,我还是投了你一票;)
$this->getUser()->setCulture('uk');