经过搜索,我发现了三种在CakePHP中实现管理员面板的方法:
- 路由 - 我不想使用此方法,因为我希望我的控制器/模型分别用于前端和管理员面板
- 插件
- 两个独立的应用程序
我通常将后台管理作为插件进行开发。这可以将您的后台/管理员控制器/视图/模型与前端分离,您不必费尽心思来使用单独的样式表、布局等。
另一个优点是,前后端仍然是同一个应用程序的一部分,因此如果需要,您可以共享逻辑/组件,例如您将能够在另一个插件中(例如plugins/Shared 或 plugins/Handytexttools)放置可在前后端都可用的助手,并在任何地方使用它们
作为经验法则; 将可能可重用于其他项目的组件放在单独的插件中,这样您就可以轻松地将这些插件添加到其他项目中,而无需问题。保持您的插件简单; 创建一个包含一个或两个助手或模型以及几个 JavaScript 文件的插件没有问题。这将使您更容易“挑选”需要用于项目的插件。一旦 Cake 缓存了所有类的文件位置,分离插件的额外开销应该是很小的。
回到“管理员”插件。尝试仅在您的管理员插件中包含特定于此项目的代码和可重用部分在另一个插件中(例如通用样式表和布局用于管理员面板)。您将能够使用最少的编码开始下一个项目的管理插件
祝您的项目好运并享受 CakePHP
$this->theme = isset($this->params['admin']) ? "Admin" : "Site";
旧版本涉及CakePHP 1.3,但仍然是一个你应该检查的问题:CakePHP管理面板
Cake way 是路由。我会使用像CakeDC Users这样的插件使事情更容易。
我知道这是一个旧的帖子。但我想问一下,有没有人在将管理面板作为插件实现时遇到过问题,特别是代码重复的问题。
例如,您正在实现一个电子商务网站。您在主插件和管理插件中都有一个OrderController。您不觉得在两个地方维护逻辑有点困难吗?
那么,只使用一个主控制器怎么样呢?它可以充当API,也可以作为您的Admin webapp的控制器。
您的公共端基本上通过API通信来获取数据。
您认为这是个好主意吗?
您可以使用像admin_index.ctp这样的管理视图,只需更改以下内容:
//Configure::write('Routing.admin', 'admin');
为
Configure::write('Routing.admin', 'admin');
在core.php中,并在控制器中添加admin_index()函数。
http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing
另一个解决方案 - 我觉得非常容易实现的 - 是这样的:public function beforeFilter(){
$this->set('current_user', $this->Auth->user());
}
这将使$current_user在您的应用程序中可用。
然后在您的视图文件中,您可以检查:
<?php if ($current_user['role'] == 'admin'){/*place code for admin users to see here*/} ?>
<?php if ($current_user){/*place code for logged-in users to see here*/} ?>