2

在 CakePHP 中,我想转换这个 URL

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

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

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

我试过这个:

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

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

4

2 回答 2

0

不可能

网络服务器对 url 片段没有任何可见性,因为基于 url 片段的此类路由将永远无法工作。

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

如果您/Foo/#hash在浏览器中请求 url,服务器只会收到/Foo/- 这是 cake 看到的 url,如果您不想看到错误,这是必须匹配路由的 url。因此,您的路线需要:

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

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

Router::connect('/FAQ',
    array('controller' => 'pages', 'action' => 'display', 'faq')
);
于 2013-07-03T10:07:07.383 回答
-1

我没有测试过:

Router::connect('/FAQ/#:faq',
    array('controller' => 'pages', 'action' => 'faq'),
    array(
        'pass' => array('faq'),
        'faq' => '[A-Za-z-_]+'
    )
);
于 2013-07-02T08:41:04.607 回答