2013-02-19 50 views
6

我试图从笨移动把CakePHP和想不出来实施管理面板的最佳途径。在CI中,我将创建两个不同的应用程序,一个用于前端,一个用于管理面板。最好的方式来实现管理面板CakePHP中

周围的Googling后,我发现三种方法可以实现在CakePHP的管理面板:

  1. 路由 - 我不想通过控制器/型号,因为我想用这是单独的前端和管理面板
  2. 插件
  3. 两个独立的应用程序

我应该使用插件来实现管理面板,或者我应该有单独的应用程序?一个优于另一个的好处?

+0

http://stackoverflow.com/questions/14474023/how-can-i-implement-multi-template-in-cakephp/14475492# 14475492 – 2013-02-20 03:40:21

+0

与1.路由,绝对。 – 2013-02-20 21:56:18

回答

16

我通常开发管理/后端作为一个插件。这使您的后端/管理员控制器/视图/模型与前端分离,您不必跳过箍环以拥有单独的样式表,布局等。

另一个优点是前端和后端都仍然是同一个应用程序的一部分,所以如果需要,你可以共享逻辑/组件,例如你可以把帮助器放在前面 - 在另一插件后端(如插件/共享或插件/ Handytexttools),并利用这些都不管你想要

作为一个经验法则;将其他项目中可重复使用的组件放在单独的插件中,这样您就可以将这些插件添加到其他项目中而不会出现任何问题。保持你的插件简单;创建一个仅包含一个或两个助手或模型以及一些JavaScript文件的插件是没有问题的。这会让你更容易'樱桃'选择你需要的插件。一旦Cake已经“缓存”了插件中所有类的文件位置,单独插件的开销应该是最小的。

回到'管理员'插件。尝试仅在您的管理插件中包含针对项目的特定代码,并在另一项中包含可重用部件的代码(例如,管理面板的通用样式表和布局)。您就可以开始管理,插件为您的下一个项目以最小的编码

祝你的项目,并享受CakePHP的

+1

感谢您的解释。很抱歉,因为我没有要求的声望点,所以无法向您提供答案。 – 2013-02-22 16:06:07

+0

我向你投稿。 thaJeztah在我的CakePHP问题上帮了我很大忙。 – bowlerae 2013-02-22 22:10:30

+0

@bowlerae感谢您的投票,我希望我的回答也会对其他人有所帮助:) – thaJeztah 2013-02-22 22:43:36

0

老,指的是CakePHP的1.3,但仍然是一个问题,你应该检查:CakePHP admin panel

蛋糕的方式是路由。我会用像CakeDC Users这样的插件让事情变得更简单。

+0

我已经检查过你指的帖子,并且只是指向了一个我不想使用的基于路由的管理面板。如果可以,我宁愿保持我的控制器/模型分离。 – 2013-02-19 16:39:52

+0

你可以使用“管理员”插件,但老实说,这个想法很糟糕,你最终会得到重复的代码。我不得不在项目中处理这种情况,并将其重构为使用前缀路由。实际上,通过将代码放在一个分离的插件中是没有任何好处的。 – burzum 2013-02-19 20:59:55

4

如果你想保持你的控制器和模型分开 - 我有一个单独的应用程序走,虽然你有一堆的应用程序之间的重复代码(维修头痛等待发生)结束。

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

在/app/Config/core.php

启用管理路由在AppController的beforeFilter():

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

把你所有的网站的观点和资产注入/应用/视图/主题/网站/

在/ app /视图/主题/联系

+0

插件方法呢?我搜索了一个或两个CakePHP的管理插件。这是否为单独的应用程序提供额外的好处? – 2013-02-19 17:21:13

+0

请阅读我的回答,我试图解释使用插件的优点。如果管理面板旨在管理多个网站,则为管理面板开发一个单独的*应用程序*可能只是可取的。如果没有,我不会创建一个单独的应用程序 – thaJeztah 2013-02-19 19:40:35

+0

我个人觉得基于路由的管理员只适用于简单的管理面板。另外我不喜欢同一个文件中的管理员和前端代码的想法。现在决定去插件的方式。 – 2013-02-22 16:11:39

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

管理员前缀对于快速即时管理功能来说是一个不错的功能,但不会分开前端和后端功能。如果你想分离两者,前缀路由不是实现这一点的最佳方式。另外,在你的观点(如管理等),把太多的逻辑很难维护,特别是对于较大的项目 – thaJeztah 2013-02-19 19:37:31

0

我知道这是一个古老的线程。但是想询问是否有人在管理面板上实施插件时遇到问题。特别重复的代码。

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

如何使用一个主控制器。它有两个目的。一个作为API,然后是管理员Web应用程序的控制器。

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

你认为这是一个好主意吗?

0

您可以像使用admin_index.ctp管理意见只是改变这个

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

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

在core.php中和在控制器添加admin_index

()函数

相关问题