【问题标题】:CakePHP - How to make routes with custom parameters?CakePHP - 如何使用自定义参数制作路线?
【发布时间】:2013-08-01 08:15:56
【问题描述】:

我的蛋糕网址是这样的:

$token = '9KJHF8k104ZX43';

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

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

/admin/password-reset/9KJHF8k104ZX43

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

/admin/password-reset

这样我就可以抓住这个案例并重定向到另一个页面或显示一条消息。

我读了很多关于路由的书,但我仍然不觉得它以我完全理解的方式正确解释了复杂的情况,所以我真的不知道该去哪里。比如:

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

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

【问题讨论】:

  • 这不是有点“浪费你的资源”吗?为什么有人会美化不相关的网址?这是一个非索引极少使用的 url。我认为没有人真正关心这个动作的 url 有多漂亮。尤其是这里的管理员路由。
  • 我想在很多地方使用它,而不仅仅是这个 URL。这只是一个例子。我基本上想知道如何使用自定义路由参数。

标签: cakephp routing cakephp-2.0 cakephp-2.3


【解决方案1】:

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

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

然后,在我看来,我可以建立一个链接,让蛞蝓通过。

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

我的控制器动作如下所示,

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

【讨论】:

  • 您是否必须使用命名参数,或者如果参数没有关联的键,则无法捕获参数?即使您没有命名参数,这看起来也可以工作。
  • 好的,我想通了。您必须列出链接中命名的参数,但它没有通过 URL 中的命名。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2011-10-22
  • 2017-04-09
  • 2012-09-28
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多