【问题标题】:Controller Inside a Controller in CakePHP?CakePHP 中的控制器内部的控制器?
【发布时间】:2014-06-01 13:31:07
【问题描述】:

我会尽我所能解释这一点..

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

我希望能够访问:

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

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

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

  • www.website.com/admins/customers/view/1 --> 还是这个?

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

【问题讨论】:

    标签: cakephp methods controller


    【解决方案1】:

    您可以使用两种解决方案

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

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

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

    【讨论】:

    • 您好,谢谢您的回复!我使用了 Admin Routing 方法,几乎​​可以正常工作。我唯一的问题是让 IsAuthorized 方法正确重定向..有什么建议吗?我上面已经描述过了!
    • 您可以在管理控制器public $uses = array('Employee', 'Orders', 'Customers'); 中使用此变量,这样您就可以在管理控制器中使用所有这些模型,并根据您的逻辑开始在您的应用程序中开发视图。 (对不起我的英语不好)
    【解决方案2】:

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

    The Cookbook 甚至有一个针对这种情况的示例:

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

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

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

    实际上,这意味着所有管理员操作与非管理员操作一起位于单独的控制器(“客户”、“订单”等)中。理论上使用单独的管理控制器是可行的,但稍微复杂一些。

    【讨论】:

    • Juhana,对不起,只是另一个问题..我在检查授权时遇到了这一切正常的异常..当没有授权的人(未登录或登录帐户没有足够的权限) ) AuthComponent 应该重定向到 website.com/users/login 但它会转到:webiste.com/admin/users/login ......这会产生“Missing Method”错误......有什么想法吗?
    【解决方案3】:

    对于其他人来说,路由按照 Juhana 的建议工作得很好,但是为了让授权重定向在我的 AppController 的 Auth 组件中正常工作,我必须插入这个:

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2012-01-23
      • 2023-04-02
      相关资源
      最近更新 更多