CakePHP重定向路由

时间:2013-07-31 16:42:59

标签: cakephp url-routing cakephp-2.3

在我的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/。如何在重定向时将参数传递给我的动作?

3 个答案:

答案 0 :(得分:4)

每{{}}}您希望使用persist而不是pass进行重定向。此代码应该可以按您的意愿工作:

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

原因是您在重定向时生成了一个新网址:

  
      
  • 传递用于定义哪个路由参数应该是   转移到传递数组。添加要传递的参数将删除它   来自常规路线阵列。防爆。 'pass'=> array('slug')
  •   
  • 坚持是   用于定义应自动包含哪些路由参数   在生成新网址时。您可以通过覆盖持久性参数   在URL中重新定义它们或通过将参数设置为删除它们   假。防爆。 'persist'=>阵列( '郎')
  •   

答案 1 :(得分:0)

你几乎就在那里,但你需要定义你的命名参数,以便蛋糕知道网址是有效的。

参考,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'
    ),
);

答案 2 :(得分:0)

使用以下代码

Router::redirect ('/come/*',
    array('controller' => 'myworks', 'action' => 'people'),
    array('params' => '[a-zA-Z0-9]+')
);