首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP -如何使用自定义参数创建路由?

CakePHP -如何使用自定义参数创建路由?
EN

Stack Overflow用户
提问于 2013-08-01 01:05:48
回答 1查看 14K关注 0票数 2

我的蛋糕URL是这样的:

代码语言:javascript
复制
$token = '9KJHF8k104ZX43';

$url = array(
    'controller' => 'users',
    'action' => 'password_reset',
    'prefix' => 'admin',
    'admin' => true,
    $token
)

我希望将其路由到更漂亮的URL,如下所示:

代码语言:javascript
复制
/admin/password-reset/9KJHF8k104ZX43

但是,我希望末尾的令牌是可选的,这样在有人没有提供令牌的情况下,它仍然会被路由到:

代码语言:javascript
复制
/admin/password-reset

这样我就可以捕捉到这种情况并重定向到另一个页面或显示一条消息。

我已经读了很多关于路由的书,但我仍然觉得它不能以我完全理解的方式正确地解释复杂的情况,所以我真的不知道该怎么做。类似于:

代码语言:javascript
复制
Router::connect('/admin/password-reset/:token', array('controller' => 'users', 'action' => 'password_reset', 'prefix' => 'admin', 'admin' => true));

我真的不知道如何选择性地捕获令牌并将其传递给URL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 16:43:17

您将希望使用命名参数。下面是我的一个项目的例子

代码语言:javascript
复制
Router::connect('/:type/:slug', 
        array('controller' => 'catalogs', 'action' => 'view'), 
        array(
            'type' => '(type|compare)', // regex to match correct tokens
            'slug' => '[a-z0-9-]+', // regex again to ensure a valid slug or 404
            'pass' => array(
                'slug', // I just want to pass through slug to my controller
            )
        ));

然后,在我看来,我可以做一个链接,它将通过弹头通过。

代码语言:javascript
复制
echo $this->Html->link('My Link', array('controller' => 'catalogs', 'action' => 'view', 'type' => $catalog['CatalogType']['slug'], 'slug' => $catalog['Catalog']['slug']));

我的控制器动作看起来像这样,

代码语言:javascript
复制
public function view($slug) {
    // etc
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17976578

复制
相关文章

相似问题

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