cakephp - 在 CakePHP 中设置条件路由

标签 cakephp cakephp-2.0

我使用的是 CakePHP 2.7,并且在 app/Config/routes.php 中定义了以下路由:

Router::connect('/:state/:location/:slug',
    ['controller' => 'pages', 'action' => 'display_program'],
    ['pass'=> ['state', 'location', 'slug']]
);
Router::connect('/:state/:location/:degree_level/:slug',
    ['controller' => 'pages', 'action' => 'display_program'],
    ['pass'=> ['state', 'location', 'degree_level', 'slug']]
);
Router::connect('/:state/:location/:degree_level',
    ['controller' => 'pages', 'action' => 'list_programs'],
    ['pass'=> ['state', 'location', 'degree_level']]
);

我遇到的问题是当我传递三个值时,第三个值可以是度数级别或slug。

/az/campus/program-name-slug [should route to pages->display_program()]

/az/campus/masters/program-name-slug [should route to pages->display_program()]

/az/campus/masters [should route to pages->list_programs()]

现在,所有三个 url 都路由到 display_program() 操作,但是我需要第三个 URL(不带 slug)路由到 list_program()。非常感谢任何想法!

最佳答案

因此,如果您的学位级别从不与程序名称冲突,那么您可以使用简单的正则表达式来进一步缩小 level_level 元素匹配的范围,例如

Router::connect('/:state/:location/:degree_level',
    ['controller' => 'pages', 'action' => 'list_programs'],
    [
        'pass'=> ['state', 'location', 'degree_level'],
        'degree_level' => 'undergraduate|graduate|bridge|doctorate'
    ]
);

这样,level_level 元素仅在使用四个给定字符串之一的情况下才会匹配。

为了使其最终起作用,您必须将此路由放在带有 slug 元素的路由之前,否则 slug 会窃取该路由,因为它会贪婪地匹配任何字符串,即最后你应该将路由排序为

// specific count match, semi-specific value match
Router::connect('/:state/:location/:degree_level',
    // ...
);

// specific count match, greedy value match
Router::connect('/:state/:location/:slug',
    // ...
);

// sepcific count match, greedy value match
Router::connect('/:state/:location/:degree_level/:slug',
    // ...
);

另请参阅 Cookbook > Routing > Route Elements

关于cakephp - 在 CakePHP 中设置条件路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31196575/

相关文章:

cakephp - 如何在 cakephp 2.x 版本中加密密码

cakephp - 在身份验证用户 session 中包含字段子集

CakePHP 在下拉菜单中增加年份范围

javascript - 单击时如何更改链接的颜色?

javascript - 如何在 CakePHP 中访问 .js 文件中的 session 变量

linux - 与 CakePHP 的符号链接(symbolic link)

.htaccess - Windows IIS7 上的 Htaccess 和 CakePHP 2

.htaccess - 自适应图像 CakePHP htaccess

cakephp - 使用 CakePHP 和河豚更改密码

session - 为什么 session 数据只能在 CakePHP 的 Controller 中使用?