CakePHP中的控制器内的控制器?

时间:2014-06-01 13:31:08

标签: cakephp methods controller

我会尽力解释这个......

什么是最佳结构(通过CakePHP使用MVC方法)来构建管理员逻辑?

我希望能够访问:

  • www.website.com/admins/ - >显示仪表板视图易于实现:“管理员”控制器中的“索引”方法。

  • www.website.com/admins/customers - >当前客户列表。易于实施:“管理员”控制器中的“客户”方法。

  • www.website.com/admins/customers/add - > 这将如何运作?!

  • www.website.com/admins/customers/view/1 - > 或者这个?

我知道我的方法是错误的,因为我应该为每个区域(“客户”,“订单”,“员工”)设置一个控制器,这样每个区域都可以拥有自己的视图,编辑,添加方法......但是如何我将它们全部绑在“管理员”控制器下,因为我希望它们都在www.website.com/admins下?

3 个答案:

答案 0 :(得分:1)

这里的误解似乎是URL必须严格遵循/controller/action/parameters模式,这不是真的。它只是默认值,您可以使用router将其更改为您想要的任何内容。

The Cookbook甚至为这个确切的案例提供了一个示例:

  

许多应用程序需要具有特权的管理部分   用户可以进行更改。这通常通过特殊的URL来完成   为/admin/users/edit/5。在CakePHP中,可以启用前缀路由   通过设置前缀来在核心配置文件中   Routing.prefixes。请注意,前缀虽然与路由器有关,但   将在app/Config/core.php

中配置
Configure::write('Routing.prefixes', array('admin'));
     

在您的控制器中,将调用任何带有admin_前缀的操作。   使用我们的用户示例,访问URL /admin/users/edit/5即可   调用我们admin_edit的方法UsersController作为传递5   第一个参数。使用的视图文件是   app/View/Users/admin_edit.ctp

在实践中,这意味着所有管理操作都在单独的控制器中("客户","订单"等)以及非管理员操作。理论上可以使用单独的管理控制器,但有点复杂。

答案 1 :(得分:1)

你可以使用2种解决方案

  1. 使用管理插件
  2. 使用管理路由(我推荐这个)

    使用管理路由,您可以使用此文档 http://book.cakephp.org/2.0/en/development/routing.html

    您也可以使用控制台创建管理路由

答案 2 :(得分:0)

对于任何其他人来说,路由工作很好,如Juhana所建议,但为了让我的AppController中的Auth组件中的授权重定向正常工作,我不得不插入:

 'unauthorizedRedirect'    => array(
                'controller' => 'users',
                'action' => 'login',
                'admin' => false
            ),

这解决了有人试图访问www.website.com/admin/orders的问题,当我需要将其重定向到www.website.com/admin/users/login时,它会重定向到wwww.website.com/users/login