将命名路由转换为CakePHP中的哈希(#)

时间:2013-07-01 23:29:38

标签: html cakephp routes

在CakePHP中,我想转换此网址

example.com/FAQ/What-came-first-the-chicken-or-the-egg

example.com/FAQ#What-came-first-the-chicken-or-the-egg

使用routes.php并让浏览器滚动到该锚点。

我试过了:

Router::connect('/FAQ/:faq',
    array('controller' => 'pages', 'action' => 'faq', '#' => ':faq'),
    array('faq' => '[A-Za-z-_]+')
);

如果我那么debug($this->request->params),则说

array(
    'plugin' => null,
    'controller' => 'pages',
    'action' => 'FAQ',
    'named' => array(),
    'pass' => array(),
    'faq' => 'What-came-first-the-chicken-or-the-egg',
    '#' => ':faq'
)

并且浏览器不会在任何地方滚动。

2 个答案:

答案 0 :(得分:0)

不可能

网络服务器有no visibility whatsoever of the url fragment,因为基于网址片段的路由永远不会有效。

您的路线需要与收到的网址匹配

如果您在浏览器中请求网址/Foo/#hash,则服务器只会收到/Foo/ - 这是蛋糕看到的网址,如果您不这样做,这是必须与路线匹配的网址想看错误。因此,您的路线必须是:

Router::connect('/FAQ',
    array('controller' => 'pages', 'action' => 'faq')
);

顺便提一下,这是一个奇怪的路线 - 页面控制器带有动态显示功能,在这个控制器中创建动作是不正常的,而不是像这样使用它:

Router::connect('/FAQ',
    array('controller' => 'pages', 'action' => 'display', 'faq')
);

答案 1 :(得分:-1)

我没有测试过它:

Router::connect('/FAQ/#:faq',
    array('controller' => 'pages', 'action' => 'faq'),
    array(
        'pass' => array('faq'),
        'faq' => '[A-Za-z-_]+'
    )
);