CakePHP有关几个子应用程序的主应用程序配置的建议

时间:2011-07-13 15:53:44

标签: cakephp

我需要创建一个这样的网站:

  • 所有人都可以访问公共网页的主页。
  • 此主页包含一个登录/注册部分以及指向多个迷你网站的链接(金额将从较小但随着时间的推移而增长)
  • minisites将具有相同的标题(徽标/菜单)和页脚(联系人,隐私政策)作为主页。将改变的是主要内容
  • 要访问任何这些迷你网站,请登录用户胸围

听起来不是很复杂吧?这就是我现在的想法(显然我不确定这是最好的方式,这就是我要求建议的原因):

  • 一个带有全局身份验证系统的CakePHP应用程序(使用Auth)
  • 每个迷你网站只是网站的不同页面,拥有自己的控制器和视图(如果需要,还有模型)。
  • 所以会有www.mysite.com/mini-site1,www.mysite.com/mini-site2等

我对这个系统的主要担忧是2:

  • 如果迷你网站的数量增长很多怎么办?会有很多控制器,视图文件夹,模型以及谁知道布局,元素等等......也许不是最好的组织
  • 如果迷你网站变得更复杂怎么办?更多表格,控制器,脚本,css ......

也许我担心太多了,我担心的不是这个问题,但我想知道是否有人对替代配置有任何建议。例如,有一个主页面(cakephp应用程序),它将是主页,每个迷你网站都是一个子应用程序(也在cakephp中),其访问权限将由主应用程序控制。通过这种方式,它将更加井井有条,每个迷你站点都位于不同的文件夹中,具有自己的控制器,视图,模型或其他需要的任何内容,并且具有所需的复杂性。我甚至不知道这是否可行,或者服务器和文件夹的配置如何。我对CakePHP有一些经验,但不是那么多。

非常感谢任何想法/建议!

2 个答案:

答案 0 :(得分:1)

如果你真的在构建多个应用程序,那么cake有一个内置的“插件”架构,允许你在插件结构中构建独立的应用程序,这个应用程序位于主应用程序层的顶层。

我们在这里开发的工作有一个主应用程序级别,可以管理所有用户数据,身份验证,ACL,并具有一些实用功能,可以覆盖所有应用程序,包括通知。

然后我们就像蛋糕一样调用插件,例如票务,文件共享和CMS。每个看起来像Cake应用程序,有自己的视图,控制器和模型,并坐在apps =>下的目录中插件目录。

它运作良好,但需要相当多的计划,以确保您不会创建不必要的应用程序或嵌套代码的鸟巢。

有关插件的更多信息: http://book.cakephp.org/view/1111/Plugins

答案 1 :(得分:1)

我有几个CakePHP应用程序,我的偏好是为每个站点都有一个应用程序并共享蛋糕源。插件很简单,可以创建功能和可重用的功能。他们保持主要代码基础轻量级,我同意这有帮助。它们不会帮助您自定义应用程序的路由或配置。

当我第一次为我的项目研究这个时,我探索了使用插件作为选项,但看到缺乏对核心配置和路由的标准控制作为一个痛点。如果您有多个站点,则访问此环境中的数据库或任何数据源可能会变得乏味。特别是如果每​​个站点都有自己的数据源,路由和配置。

我看到它的方式偏离“CakePHP方式”并不理想,在1个应用程序代码库中运行多个站点有多复杂?

挑战

  1. 您的所有路线是否相同,或者某些网站需要不同的规则。
  2. 您的所有网站的功能是否相同,或者是否存在一些可能导致您破解核心代码的差异。
  3. 想象一下这在任何配置或app_controller.php

    if($domain == 'first.example.com'):
    #This is the first time I override this value, is it the last?
    endif;
    

    在网站没有结束的情况下,我发现我的开发时间花在寻找巧妙的方法来抽象这个。不是我渴望的核心功能。

    为防止众所周知的鸟巢,我选择为每个网站创建一个应用程序目录。我这样做的主要原因是为了防止在代码库中出现上述混乱。我运行了多个应用程序源,但是使用bash脚本和源代码控制,与在1个应用程序中抽象所有这些内容的巧妙方法相比,这是一件容易的事。

    为什么

    您的网站变得更容易测试和管理。它有助于每个站点都有自己的缓存和日志位置,因此如果确实发生了某些事情,那么您将拥有更集中的调试时间。您甚至可以在所有站点上共享插件目录。这种方式更容易,因为管理多个环境的复杂性得到了解决。

    虽然为每个站点提供代码库可能被认为是次优的。我认为这是实用主义过程的一部分。您决定什么是适合您的,我知道有一些人使用单一解决方案谈论成功。选择是你的。

    如果您决定为每个网站选择一个应用程序。这类似于我的文件夹结构

    /var/www/cakehost/first.example.com/current #Symlink that points to the latest revision.
    /var/www/cakehost/second.example.com/current #Symlink that points to the latest revision.
    /var/www/cakehost/third.example.com/current #Symlink that points to the latest revision.
    /var/www/cakehost/src/cake
    

    一旦您决定为每个站点导出1个应用程序,您只需按照预期的方式使用bootstrap.php文件。

    我使用脚本从源代码管理中导出样板“app”。该应用程序在没有黑客的所有环境中运行。任何偏差都来自bootstrap.php文件。为了简化这一过程,您可以从所有站点创建一个插件目录和符号链接。

    /var/www/cakehost/plugins/ #Symlink source for each app.
    

    即使看起来像是不必要的重复,我的代码仍然整洁,测试很容易。我尝试使用1个应用程序来处理所有插件并不是非常正确。