1

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

“您可以使用以下路线将 url /admin 映射到页面控制器的 admin_index 操作:”

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

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

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

4

2 回答 2

4

admin=true在路由中表示您的网址以 . 为前缀/admin

因此,在您的示例中,您的/admin路线实际上连接到:/admin/pages/index,并由admin_index()您的页面控制器中的操作提供服务(与非前缀index()操作相反)。

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

添加manager=true到 url(连同相关的前缀设置)意味着以 开头的 url /manager,并将映射到manager_...()控制器中的函数。

您可以使用两个(或更多!)前缀,但不能在同一个 url 中。

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

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

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

于 2013-06-03T14:11:01.753 回答
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
   }
}
于 2013-06-03T14:24:53.600 回答