2013-07-31 169 views
1

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

这有效,但这是连接。

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

the documentation要使用persist而非pass的重定向。此代码应该工作,只要你想:

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

的原因是因为你生成一个新的URL时,重定向:

  • 用于定义该路由参数应该将 转移到pass数组中。添加要传递的参数将从常规路由数组中删除它 。防爆。 “通” =>数组(“蛞蝓”)
  • 坚持是用来定义路由参数应该是自动生成新网址当包括 。您可以通过 覆盖持久参数在url中重新定义它们,或者通过将参数设置为 false将其删除。防爆。 '坚持'=>数组( '郎')
+0

这工作得很好:) – trante

+0

是否有可能向URL添加静态查询字符串?例如,我想将'''?processed = 1'''添加到最终的URL。 – trante

+1

@trante补充说,我的回答。 –

0

你几乎在那里,但你需要定义你的命名参数,以便蛋糕知道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' 
    ), 
); 
+0

我插入下壳体词为 “MYNAME”。但是这也重定向到''''example.com/myworks/people /''' – trante

+0

当我尝试“Router :: connect”时,它可以工作,但“Router :: redirect”不起作用。 – trante

0

使用以下代码

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

你尝试过这种单衣吗?这不起作用。 – trante