1

在我的 CakePHP 2.3 应用程序中,我想example.com/come/Harry重定向example.com/myworks/people/Harry.

这有效,但这是连接的。

Router::connect ('/come/:myname',
    array('controller' => 'myworks', 'action' => 'people'),
    array(
        'pass' => array('myname')
    )
);

我需要一个 301 重定向。我试过这个:

Router::redirect ('/come/:myname',
    array('controller' => 'myworks', 'action' => 'people'),
    array(
        'pass' => array('myname')
    )
);

但它重定向到example.com/myworks/people/. 重定向时如何将参数传递给我的操作?

4

3 回答 3

4

根据您要使用的文档persist而不是pass用于重定向。此代码应按您的意愿工作:

Router::redirect ('/come/*',
    array('controller' => 'myworks', 'action' => 'people',
          '?' => array('processed' => 1)),
    array(
        'persist' => array('myname')
    )
);

原因是因为您在重定向时生成了一个新的 url:

  • pass用于定义应将哪些路由参数移入 pass 数组。添加要传递的参数会将其从常规路由数组中删除。前任。'pass' => 数组('slug')
  • persist用于定义在生成新 url 时应该自动包含哪些路由参数。您可以通过在 url 中重新定义持久性参数来覆盖它们,或者通过将参数设置为 false 来删除它们。前任。'坚持' => 数组('lang')
于 2013-08-26T04:09:22.567 回答
0

你几乎在那里,但你需要定义你的命名参数,以便 cake 知道该 url 是有效的。

参考,http://book.cakephp.org/2.0/en/development/routing.html#passing-parameters-to-action

Router::redirect (
    '/come/:myname',
    array('controller' => 'myworks', 'action' => 'people'),
    array(
        'myname' => '[a-z]+',
        'pass' => array('myname'),
        'status' => '301'
    ),
);
于 2013-08-01T15:02:05.220 回答
0

使用以下代码

Router::redirect ('/come/*',
    array('controller' => 'myworks', 'action' => 'people'),
    array('params' => '[a-zA-Z0-9]+')
);
于 2013-08-26T06:07:41.173 回答