我需要在cakephp中准备三个独立的模块。一个是管理员,酒店管理员,客人。这三个用户具有相同的登录屏幕,但内部布局将完全分开。
我们可以为所有这些文件夹设置三个独立的文件夹结构,例如三个app文件夹,或者我们需要为这些用户使用路由(如前所述here ),这将导致混合控制器并且难以操作。< / p>
答案 0 :(得分:4)
您可以将模块创建为“插件”,然后它们将具有单独的模型,视图和控制器。插件的默认路由是可以通过/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
只有当三个模块具有基本相同的控制器和模型时,我才会使用路由。
答案 1 :(得分:1)
将前缀路由与多个layouts结合使用可以解决您的问题。正如Joep在评论中提到的那样,控制器中的操作遵循一个简单的命名方案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)