CakePHP - 重定向到控制器没有动作,没有slug

时间:2014-08-24 23:36:48

标签: php cakephp redirect routing routes

使用CakePHP,我想从这个URL重定向:

http://www.example.com/songs/12345/Michael-Jackson-Billie-Jean

到此网址:

http://www.example.com/songs/12345

在新网址中,控制器为songs,ID为12345,隐含操作为view,并且已删除子弹(Michael-Jackson-Billie-Jean)。< / p>

是否可以使用routes配置文件对此重定向进行编程,还是需要在控制器或路由类中编写稍高级的重定向?

我尝试了以下两种可能性无济于事。在第一次尝试中,我最终在网址中获得了一个带有view的网址,并在网址末尾添加了参数:

Router::redirect(
    '/songs/:id/**',
    array('controller' => 'songs', 'action' => 'view'),
    array('persist' => array('id'))
);
// Redirects to http://www.example.com/songs/view/Michael-Jackson-Billie-Jean%2Fid%3A1286072880/id:view

在我的第二次尝试中,重定向几乎可以正常工作,但字符串:id实际上在URL中回显:

Router::redirect(
    '/songs/:id/**',
    '/songs/:id'
);
// Redirects to http://www.example.com/songs/:id

我想我可以在root .htaccess文件中写这个重定向,但我更愿意将所有路由保存在一个地方;即CakePHP路由文件。

有谁知道如何重定向到http://www.example.com/songs/:id :id是歌曲ID而不是字符串:id?非常感谢你。

1 个答案:

答案 0 :(得分:1)

使用以下路线获取简单解决方案:

Router::connect('/songs/*', array('controller' => 'songs', 'action' => 'view'),array('pass' => array('id')));

function view($id=null){   

         // $id will be song id
         // For example, http://www.example.com/songs/12345 here $id is 12345

}

不要使用.htaccess,它可以通过routes.php轻松处理。

干杯