首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有控制器通配符的CakePhp路由

带有控制器通配符的CakePhp路由
EN

Stack Overflow用户
提问于 2013-12-03 18:54:41
回答 1查看 530关注 0票数 1

我想要重路由所有domainname.com/affiliateXYZ访问一个AffController重路由操作。但是怎么做呢?

“附属”的路由元素子字符串将是一致的,子字符串'XYZ‘将有所不同。

我更喜欢允许domainname.com/aff/reroute/XYX (或控制器/动作/参数格式的domainname.com/aff/reroute/CigarKing) )的项目需求,但是唉。不是这样的。

最初,我尝试了以下操作,但没有成功:

代码语言:javascript
复制
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,提前。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 20:26:22

您正在寻找正则表达式匹配,在此功能的帮助下,您可以定义如何匹配特定的路由元素。

此选项可用于Router::connect()的第三个参数。

您可以用element => regex格式定义它:

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20359321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档