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

标签 cakephp routes cakephp-2.0 cakephp-2.3

我的蛋糕网址是这样的:

$token = '9KJHF8k104ZX43';

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

我希望它能路由到更漂亮的 URL,例如:

/admin/password-reset/9KJHF8k104ZX43

但是,我希望最后的 token 是可选的,这样如果有人不提供 token ,它仍然会被路由到:

/admin/password-reset

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

我已经阅读了很多关于路由的书,但我仍然觉得它没有以我完全理解的方式正确解释复杂的情况,所以我真的不知道该从哪里开始。像这样的东西:

Router::connect('/admin/password-reset/:token', array('controller' => 'users', 'action' => 'password_reset', 'prefix' => 'admin', 'admin' => true));

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

最佳答案

您需要使用命名参数。以我的一个项目为例

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
            )
        ));

然后,在我看来,我可以创建一个链接,让 slug 通过。

echo $this->Html->link('My Link', array('controller' => 'catalogs', 'action' => 'view', 'type' => $catalog['CatalogType']['slug'], 'slug' => $catalog['Catalog']['slug']));

我的 Controller Action 是这样的,

public function view($slug) {
    // etc
}

关于CakePHP - 如何使用自定义参数创建路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976578/

相关文章:

MySQL删除仅存在于子表/cakephp更新中的记录?

CakePHP hasOne/belongsTo 模型关系

authentication - 如何与经过身份验证的用户数据一起检索关联?

routes - Padrino:url_for 从子应用程序访问项目级路由

ruby-on-rails-3 - 更改 URL 而不更改资源名称

php - CakePHP 插件中的路由

CakePHP 2.x : Alaxos ACL Plugin- configure the admin route

CakePHP - 如何创建自定义异常?

PHP/CakePHP - 从数据库创建值列表

c - 处理 Linux 内核数据包路由的更好方法