我想要重路由所有domainname.com/affiliateXYZ访问一个AffController重路由操作。但是怎么做呢?
“附属”的路由元素子字符串将是一致的,子字符串'XYZ‘将有所不同。
我更喜欢允许domainname.com/aff/reroute/XYX (或控制器/动作/参数格式的domainname.com/aff/reroute/CigarKing) )的项目需求,但是唉。不是这样的。
最初,我尝试了以下操作,但没有成功:
Router::connect('/affiliate*', array('controller' => 'aff', 'action' => 'reroute'));
Router::connect('/affiliate**', array('controller' => 'aff', 'action' => 'reroute'));
Router::connect('/:controller*', array('controller' => 'aff', 'action' => 'reroute'), array('controller'=>'(affiliate)');一旦进入控制器重路由操作,我将把affiliateXYZ炸成仅仅'XYZ‘,然后继续我知道如何做的事情。我的问题是将affiliateXYZ作为第一个路由元素路由到控制器,同时不影响当前的功能。
我使用Router::connect('/:affiliate', array('controller' => 'aff', 'action' => 'reroute'),array('pass'=>array('affiliate')));获取控制器中的信息,直到我看到了对先前存在的控制器的负面影响(我假设是因为我没有显式列出所有其他控制器,所以我认为我不应该这样做。)
如何路由w/前缀(更准确地说,是“附属”的子字符串)?
我知道前缀是错误的术语。
Thx,提前。
发布于 2013-12-03 20:26:22
您正在寻找正则表达式匹配,在此功能的帮助下,您可以定义如何匹配特定的路由元素。
此选项可用于Router::connect()的第三个参数。
您可以用element => regex格式定义它:
Router::connect(
'/:affilate',
array(
'controller' => 'aff',
'action' => 'reroute'
),
array(
'pass' => array('affilate'),
'affilate' => 'affilate[^/]+'
)
);这将匹配以affilate开头的任何URL,后面跟着一个或多个不是/的字符。
另见http://book.cakephp.org/2.0/en/development/routing.html#route-elements
https://stackoverflow.com/questions/20359321
复制相似问题