在CakePHP中实现管理面板的最佳方式

时间:2013-02-19 16:11:19

标签: cakephp admin cakephp-2.1

我正试图从CodeIgniter转移到CakePHP,无法找出实现管理面板的最佳方法。在CI中,我将创建两个不同的应用程序,一个用于前端,一个用于管理面板。

在谷歌搜索后,我发现了三种在CakePHP中实现管理面板的方法:

  1. 路由 - 我不希望控制器/模型使用它,因为前端和管理面板是分开的
  2. 插件
  3. 两个独立的应用
  4. 我应该使用插件来实现管理面板还是应该有单独的应用程序?一个人比另一个人有什么好处?

6 个答案:

答案 0 :(得分:16)

我通常将admin / backend开发为插件。这使得后端/管理控制器/视图/模型与前端分离,您不必跳过具有单独样式表,布局等的环节。

另一个优点是前端和后端仍然是同一个应用程序的一部分,所以如果需要,你可以共享逻辑/组件,例如,你将能够放置帮助器可用于另一个插件中的前端和后端(例如插件/共享或插件/ Handytexttools)并在任何地方使用它们

根据经验;在单独的插件中放置可以为其他项目重用的组件,这样你就可以毫无问题地将这些插件添加到其他项目中。保持插件简单;创建一个只包含一个或两个帮助器或模型以及一些JavaScript文件的插件没问题。这样可以更容易地“挑选”项目所需的插件。一旦Cake“缓存”了插件中所有类的文件位置,单独插件的开销应该是最小的。

回到'admin'插件。尝试仅在管理插件中包含特定于项目的代码,并在另一个中包含可重用部分(例如,管理面板的通用样式表和布局)。您将能够以最少的编码为您的下一个项目启动管理员插件

祝你的项目好运,享受CakePHP

答案 1 :(得分:4)

如果你想让你的控制器和模型分开 - 我会选择一个单独的应用程序,尽管你最终会在应用程序之间出现一堆重复的代码(维护头痛等待发生)。

我的选择是管理员路由和管理主题。

在/app/Config/core.php中启用管理路由

在AppController beforeFilter()中:

$this->theme = isset($this->params['admin']) ? "Admin" : "Site";

将您的所有网站视图和资源移至/ app / View / Themed / Site /

在/ app / View / Themed / Admin

中创建管理主题

答案 2 :(得分:0)

旧并且引用了CakePHP 1.3,但仍然是一个你应该检查的问题:CakePHP admin panel

Cake方式正在路由。我会使用像CakeDC Users这样的插件来简化操作。

答案 3 :(得分:0)

您可以使用admin-routing。退房:

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*/} ?>

答案 4 :(得分:0)

我知道这是一个老线程。但是想问一下是否有人在将管理面板作为插件实现时遇到了麻烦。特别是代码重复。

例如,您正在实施电子商务网站。你在main和admin插件中都有一个OrderController。难道你不认为在两个地方维持逻辑有点困难吗?

如何使用一个主控制器。这有两个目的。一个是API,然后是管理员webapp的控制器。

然后,您的公共方面将基本上通过API进行通信以获取数据。

你认为这是个好主意吗?

答案 5 :(得分:0)

您可以使用管理员视图,例如admin_index.ctp,只需更改此

即可

//配置:: write('Routing.admin','admin');

配置:: write('Routing.admin','admin');

在core.php和控制器中添加admin_index()函数