我正在尝试从 CodeIgniter 迁移到 CakePHP,但无法找出实现管理面板的最佳方式。在 CI 中,我会创建两个不同的应用程序,一个用于前端,一个用于管理面板。
在谷歌搜索之后,我发现了三种在 CakePHP 中实现管理面板的方法:
- 路由 - 我不想使用它,因为我希望控制器/模型将前端和管理面板分开
- 插入
- 两个独立的应用程序
我应该使用插件来实现管理面板还是应该有单独的应用程序?一个比另一个有什么好处?
我正在尝试从 CodeIgniter 迁移到 CakePHP,但无法找出实现管理面板的最佳方式。在 CI 中,我会创建两个不同的应用程序,一个用于前端,一个用于管理面板。
在谷歌搜索之后,我发现了三种在 CakePHP 中实现管理面板的方法:
我应该使用插件来实现管理面板还是应该有单独的应用程序?一个比另一个有什么好处?
我通常将管理/后端开发为插件。这使您的后端/管理控制器/视图/模型与前端分离,并且您不必跳过箍来拥有单独的样式表、布局等。
另一个优点是前端和后端仍然是同一个应用程序的一部分,因此如果需要,您可以共享逻辑/组件,例如,您可以将可用于前端和后端的助手放在另一个插件中(例如插件/共享或插件/Handytexttools)并在任何地方使用它们
根据经验; 将可能可用于其他项目的组件放在单独的插件中,这样您就可以将这些插件添加到其他项目而不会出现问题。保持你的插件简单;创建一个只包含一两个助手或模型和几个 JavaScript 文件的插件是没有问题的。这将使您更容易“挑选”项目所需的插件。一旦 Cake 已经“缓存”了插件中所有类的文件位置,单独插件的开销应该是最小的。
回到“管理员”插件。尝试只在您的管理插件中包含此项目的特定代码,并在另一个插件中包含可重用部分(例如,管理面板的通用样式表和布局)。您将能够以最少的编码为您的下一个项目启动一个管理插件
祝你的项目好运,享受 CakePHP
如果你想让你的控制器和模型分开 - 我会使用一个单独的应用程序,尽管你最终会在应用程序之间得到一堆重复的代码(维护头痛等待发生)。
我的选择是管理路由和管理主题。
在 /app/Config/core.php 中启用管理路由
在 AppController beforeFilter() 中:
$this->theme = isset($this->params['admin']) ? "Admin" : "Site";
将所有站点视图和资产移动到 /app/View/Themed/Site/
在 /app/View/Themed/Admin 中创建您的管理主题
旧的,指的是 CakePHP 1.3,但仍然是一个你应该检查的问题:CakePHP 管理面板
蛋糕的方式是路由。我会使用像CakeDC Users这样的插件,它可以让事情变得更容易。
您可以使用管理员路由。查看:
http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing
另一个解决方案——我发现它很容易实现——是这样的:
在您的AppController中:
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*/} ?>
我知道这是一个旧线程。但是想问一下是否有人在将管理面板作为插件实现时遇到了麻烦。特别是代码重复。
例如,您正在实施一个电子商务网站。您在主插件和管理插件中都有一个 OrderController。你不觉得在两个地方保持逻辑有点困难吗?
只使用一个主控制器怎么样。它有两个目的。一个作为 API,然后是您的 Admin webapp 的控制器。
然后,您的公共方面将基本上通过 API 进行通信以获取数据。
你认为这是个好主意吗?
您可以使用像 admin_index.ctp 这样的管理视图,只需更改它
//配置::write('Routing.admin', 'admin');
到
配置::write('Routing.admin', 'admin');
在 core.php 和控制器中添加 admin_index() 函数