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

6
我正在尝试从CodeIgniter转移到CakePHP,但无法找到最佳实现管理员面板的方法。在CI中,我会创建两个不同的应用程序,一个用于前端,另一个用于管理员面板。
经过搜索,我发现了三种在CakePHP中实现管理员面板的方法:
  1. 路由 - 我不想使用此方法,因为我希望我的控制器/模型分别用于前端和管理员面板
  2. 插件
  3. 两个独立的应用程序
我应该使用插件来实现管理员面板还是有单独的应用程序?它们之间是否有任何优势?

http://stackoverflow.com/questions/14474023/how-can-i-implement-multi-template-in-cakephp/14475492#14475492 - Dipesh Parmar
一定要选择路由。 - joshua.paling
6个回答

16

我通常将后台管理作为插件进行开发。这可以将您的后台/管理员控制器/视图/模型与前端分离,您不必费尽心思来使用单独的样式表、布局等。

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

作为经验法则; 将可能可重用于其他项目的组件放在单独的插件中,这样您就可以轻松地将这些插件添加到其他项目中,而无需问题。保持您的插件简单; 创建一个包含一个或两个助手或模型以及几个 JavaScript 文件的插件没有问题。这将使您更容易“挑选”需要用于项目的插件。一旦 Cake 缓存了所有类的文件位置,分离插件的额外开销应该是很小的。

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

祝您的项目好运并享受 CakePHP


1
感谢您的解释。不幸的是,我没有足够的声望点数来为您的答案点赞。 - Jatinder Thind
我为你点赞了。thaJeztah 在我的 CakePHP 问题上帮了我很多。 - bowlerae
@bowlerae 谢谢你的点赞,我希望我的回答对其他人也有所启发 :) - thaJeztah
你推荐哪个管理插件?你是否与它们一起使用前缀路由? - user6972
1
@user6972 我们(我所在的公司)没有使用现有的插件,而是自行开发了一个插件,使用 Twitter Bootstrap 来设计 GUI(同时也为此开发了一个 CakePHP 插件)。我们不使用前缀路由,因为已经有了插件,这样你的 URL 中就会有一个前缀(/myplugin/mycontroller/myaction)。 - thaJeztah

4
如果你想保持控制器和模型的分离 - 我会选择一个单独的应用程序,尽管你最终会在应用程序之间拥有大量重复的代码(等待发生的维护问题)。我的选择是管理路由和管理主题。在 /app/Config/core.php 中启用管理路由,在 AppController 的 beforeFilter() 中:
$this->theme = isset($this->params['admin']) ? "Admin" : "Site";

将网站的所有视图和资源移动到/app/View/Themed/Site/目录下。
在/app/View/Themed/Admin中创建管理界面主题。

插件方法怎么样?我在谷歌上搜索了一两个CakePHP的管理插件。相比独立应用程序,这是否提供了任何额外的好处? - Jatinder Thind
请阅读我的答案,我试图解释使用插件的优点。仅当管理员面板设计用于管理多个网站时,开发单独的应用程序才是可取的。如果不是这样,我就不会创建单独的应用程序。 - thaJeztah
我个人认为基于路由的管理仅适用于简单的管理面板。此外,我不喜欢将管理和前端代码放在同一个文件中的想法。目前决定采用插件方式。 - Jatinder Thind

0

旧版本涉及CakePHP 1.3,但仍然是一个你应该检查的问题:CakePHP管理面板

Cake way 是路由。我会使用像CakeDC Users这样的插件使事情更容易。


我已经检查了你所提到的帖子,那只是指向一个基于路由的管理面板,而我不想使用它。如果可能的话,我更愿意保持我的控制器/模型分开。 - Jatinder Thind
你可以使用一个“admin”插件,但老实说,这个想法很糟糕,并且最终会导致重复的代码。我以前在项目中处理过这样的情况,并将其重构为使用前缀路由。实际上,把代码放在一个单独的插件中并没有什么好处。 - floriank

0

我知道这是一个旧的帖子。但我想问一下,有没有人在将管理面板作为插件实现时遇到过问题,特别是代码重复的问题。

例如,您正在实现一个电子商务网站。您在主插件和管理插件中都有一个OrderController。您不觉得在两个地方维护逻辑有点困难吗?

那么,只使用一个主控制器怎么样呢?它可以充当API,也可以作为您的Admin webapp的控制器。

您的公共端基本上通过API通信来获取数据。

您认为这是个好主意吗?


0

您可以使用像admin_index.ctp这样的管理视图,只需更改以下内容:

//Configure::write('Routing.admin', 'admin');

Configure::write('Routing.admin', 'admin');

在core.php中,并在控制器中添加admin_index()函数。


0
你可以使用管理员路由。请查看:

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

管理前缀是一项非常好的功能,可用于快速、临时的管理员功能,但不能分离前端和后端功能。如果您想分离两者,前缀路由不是实现此目的的最佳方式。另外,在视图中放置过多的逻辑(如管理员等)会很难维护,特别是对于较大的项目来说。 - thaJeztah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接