如何从cakephp2中的URL中删除动作名称

时间:2013-07-23 09:09:59

标签: .htaccess cakephp routing routes cakephp-2.0

可能重复,但我没有得到任何正确答案或帮助

实际上我想这样做:

我当前的网址是:http://mysite.com/MyController/view/page1

但我想要的是:http://mysite.com/MyController/page1

表示我想隐藏URL中的操作名称。

我用过

Router::connect('/:controller/:id',array('action' => 'view'),array('id' => '[0-9]+'));

但它不适合我

低于一个工作正常但

Router::connect('/:controller/*', array('action' => 'view'),array('id' => '[0-9]+'));

它适用于所有控制器,但我想申请特定的控制器

5 个答案:

答案 0 :(得分:1)

您可以使用Cake的路由来实现此功能。

将以下内容添加到您的app / Config / routes.php

Router::connect('/Controller/page1', '/Controller/view/page1');

但您必须为每个“页面”添加路线。

您可以使用通配符路径匹配以/ Controller /:

开头的所有内容
Router::connect('/Controller/*', '/Controller/view/');

或者,不涉及路线:

class FooController extends AppController

    public function index($stub) {

        $data = $this->findByStub($stub);

        if (!$data) {
            die('page not found');
        }

        $this->set('data', $data);

    }

}

}

允许您使用/ foo / page1

等网址

(例程查找具有匹配'page1'的存根字段的Foo)

这有效,但你将失去反向路由的好处,这意味着你可以制作这样的链接:$ this-> Html-> link(array('controller'=>'foo','action' =>'view','page1');哪个蛋糕将自动重写以生成:/ foo / page1

答案 1 :(得分:1)

使用

Router::connect('/MyController/:id', array('controller' => 'MyController','action' => 'view'),array('id' => '[0-9]+'));

答案 2 :(得分:0)

使用此代码

Router::connect('/:controller/*', array('action' => 'view'),array('id' => '[0-9]+'));

答案 3 :(得分:0)

为您的控制器尝试以下代码,这里使用GroupsController作为示例

您可以在app \ Config \ routes.php

中添加此内容
Router::connect('/groups/:slugParam', array('controller' => 'groups', 'action' => 'index'), array('slugParam' => '[a-zA-Z0-9]+'));

这应该重定向表单的所有请求

http://www.site.com/groups/ *至http://www.site.com/groups/index

(* =>控制器名称后面的任何内容)

所以现在我必须改变GroupsController中的默认索引函数以反映这种变化

<?php
App::uses('AppController', 'Controller');
class GroupsController extends AppController {

        public function index($id = null) {

            //pr($this->request->params);   this where all data is intercepted...
            if(isset($this->request->params['slugParam']) && !empty($this->request->params['slugParam'])) {

                // i have a slug field in groups databsae and hence instead of id am using slug field to identify the post.
                $data = $this->Group->findBySlug($this->request->params['slugParam']);
                $this->set('group', $data);
                $this->render('/groups/view');
            } 
    }
}
?>

答案 4 :(得分:0)

使用此代码

Router::connect('/MyController/:id', array('controller' => 'MyController','action' => 'view'),array('id' => '[0-9]+'));