我正在考虑与我所在地区提供支付网关服务的商家合作的可能性。
特定商家使用“付款页面”概念,即我的网站的特定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
答案 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)