0

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

实际上我想做这样的事情:

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

但我想要类似的东西:http: //mysite.com/MyController/page1

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

我用过

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

但它不适合我

低于 1 工作正常但

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

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

4

5 回答 5

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

于 2013-07-23T09:22:29.707 回答
1

利用

Router::connect('/MyController/:id', array('controller' => 'MyController','action' => 'view'),array('id' => '[0-9]+'));
于 2013-07-23T11:18:35.483 回答
0

使用此代码

Router::connect('/:controller/*', array('action' => 'view'),array('id' => '[0-9]+'));
于 2013-07-23T10:01:06.263 回答
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');
            } 
    }
}
?>
于 2013-07-23T12:05:41.260 回答
0

使用此代码

Router::connect('/MyController/:id', array('controller' => 'MyController','action' => 'view'),array('id' => '[0-9]+'));
于 2013-08-06T12:42:08.590 回答