【问题标题】:multiple modules in cakephp applicationcakephp应用程序中的多个模块
【发布时间】:2018-02-03 19:52:42
【问题描述】:

我需要在 cakephp 中准备三个独立的模块。一个是管理员,酒店管理员,客人。这三个将是具有相同登录屏幕但内部布局将完全分开的不同类型的用户。

我们能否为它们所有人设置三个单独的文件夹结构,例如三个 app 文件夹,或者我们需要为这些用户使用路由(如提到的 here ),这将导致混合控制器并且难以操作。

【问题讨论】:

  • 使用路由。为什么这些混合控制器难以操作?您将只有一个操作列表,例如 admin_index()、hotel_admin_index() 和 guest_index()。

标签: php cakephp


【解决方案1】:

您可以将模块创建为“插件”,然后它们将具有单独的模型、视图和控制器。插件的默认路由是可以通过/plugin_name/controller_name/action 访问。插件甚至可以有自己的布局等。在您的情况下,主要应用程序将简化为验证用户和检查权限。

更多信息:
1.3:http://book.cakephp.org/1.3/en/view/1111/Plugins
2.0:http://book.cakephp.org/2.0/en/plugins.html

只有当三个模块具有基本相同的控制器和模型时,我才会使用路由。

【讨论】:

  • 感谢您的回复。如果我想为所有模块/插件保留相同的模型
  • 然后,您将在主应用程序中定义模型并从插件中使用它们。
【解决方案2】:

将前缀路由与多个layouts 结合使用应该可以解决您的问题。正如 Joep 在 cmets 中提到的,控制器中的操作遵循简单的命名方案 admin_index(), hotel_admin_index() and guest_index(),这使得组织代码变得容易。

您可以在 AppController 中使用以下代码来处理布局之间的切换(即 default.ctp、admin.ctp 和 hotel_admin.ctp)。

function beforeRender() {
  if (isset($this->params['prefix']) { 
    if ($this->params['prefix'] == 'admin') {
      $this->layout = 'admin';
    } else if ($this->params['prefix'] == 'hotel_admin')
      $this->layout = 'hotel_admin';
    }
  }
}

您甚至可以更进一步,分离所有静态资源(即 /img/admin/new-blah.png)

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多