我很难理解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”?
答案 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
}
}