CakePHP管理员路由

时间:2013-06-03 08:35:19

标签: cakephp cakephp-2.3

我很难理解CakePHP的这个管理路由。来自Cookbook:

“您可以使用以下路线将网址/管理员映射到网页控制器的admin_index操作:”

Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));

我不清楚的是“'admin'= true”。这样做的目的是什么?当你调用logout-function时,你是否将参数“'admin'= false”传递给AppController中的重定向函数?

当您使用多个前缀时,如果要启用manager-prefix,是否使用“'manager'= true”?

2 个答案:

答案 0 :(得分:4)

路线中的

admin=true表示您的网址前缀为/admin

因此,在您的示例中,您的/admin路由实际连接到:/admin/pages/index,并由您的网页控制器中的admin_index()操作提供服务(而不是前缀index() 1}}动作)。

您可以确保使用admin=false创建所有注销链接,以便它们映射到标准Users::logout()操作,或者创建一个处理管理员注销的新操作admin_logout()

manager=true添加到网址(以及相关的前缀设置)表示以/manager开头的网址,并将映射到控制器中的manager_...()个功能。

您可以使用两个(或更多!)前缀,但不能使用相同的网址。

/pages/index映射到:PagesController:index();

/admin/pages/index映射到:PagesController:admin_index();

/manager/pages/index映射到:PagesController:manager_index();

答案 1 :(得分:2)

路由器前缀

在CakePHP 2.x前缀中有所改变。

您现在可以拥有多个前缀,但必须在core.php文件中声明这些前缀。

Configure::write('Routing.prefixes', array('admin','api','json'));

这将声明3个前缀,并且无需修改路由表以使其工作。单词prefix表示在调度到控制器时它位于操作名称之前。

例如;

class DocumentsController extends AppController
{
     public index() { ... }
     public admin_index() { ... }
     public api_index() { ... }
     public json_index() { ... }
}

当请求其中一个URL时,CakePHP将调用正确的操作。

http://example.com/documents/index
http://example.com/admin/documents/index
http://example.com/api/documents/index
http://example.com/json/documents/index

您不能做的是一次使用多个前缀。以下内容无效。

http://example.com/admin/json/documents/index

这需要自定义路由,因为CakePHP不知道要调用哪个动作。

当一个动作被调用时,您可以在请求中使用前缀参数。

public function beforeFilter()
{
   if(isset($this->request->params['admin']))
   {
        // an admin prefix call is being made
   }
}