CakePHP关于主应用程序和多个子应用程序配置的建议

CakePHP关于主应用程序和多个子应用程序配置的建议,cakephp,Cakephp,我需要创建一个这样的网站: 为每个人提供公共访问的主页 此主页包含一个登录/注册部分和多个迷你网站的链接(数量开始会很小,但会随着时间的推移而增加) 迷你网站的页眉(徽标/菜单)和页脚(联系人、隐私政策)与主页相同。将要改变的是主要内容 要访问这些迷你网站,用户必须登录 听起来不是很复杂,对吧?这就是我现在的想法(很明显,我不确定这是不是最好的方式,这就是我征求意见的原因): 一个带有全局自动认证系统的CakePHP应用程序(使用Auth) 每个迷你站点只是站点的一个不同页面,有自己的控制

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

  • 为每个人提供公共访问的主页
  • 此主页包含一个登录/注册部分和多个迷你网站的链接(数量开始会很小,但会随着时间的推移而增加)
  • 迷你网站的页眉(徽标/菜单)和页脚(联系人、隐私政策)与主页相同。将要改变的是主要内容
  • 要访问这些迷你网站,用户必须登录
听起来不是很复杂,对吧?这就是我现在的想法(很明显,我不确定这是不是最好的方式,这就是我征求意见的原因):

  • 一个带有全局自动认证系统的CakePHP应用程序(使用Auth)
  • 每个迷你站点只是站点的一个不同页面,有自己的控制器和视图(必要时还有模型)
  • 因此将有www.mysite.com/mini-site1、www.mysite.com/mini-site2等
我对该系统的主要关注点有2点:

  • 如果迷你网站的数量增长很多怎么办?会有很多控制器、视图文件夹、模型,谁知道布局、元素等等。。。也许不是最好的组织
  • 如果迷你网站变得更复杂怎么办?更多表格、控制器、脚本、css
也许我担心的太多了,我担心的不是这样的问题,但我想知道是否有人对替代配置有任何建议。例如,有一个主页(cakephp应用程序),这将是主页,每个迷你网站是一个子应用程序(同样在cakephp中),其访问将由主应用程序控制。通过这种方式,它将更有条理,每个迷你站点都位于不同的文件夹中,有自己的控制器、视图、模型或任何它需要的东西,并且尽可能复杂。我甚至不知道这是否可行,也不知道服务器和文件夹的配置会是什么样子。我有一些CakePHP的经验,但不是很多


如有任何想法/建议,将不胜感激

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

我们在这里开发了一个应用程序,它有一个主应用程序级别,用于管理所有用户数据、身份验证、ACL,并具有一些跨所有应用程序的实用功能,包括通知

然后我们就有了cake所称的插件,比如票务、文件共享和CMS。每个应用程序看起来都像蛋糕应用程序,有自己的视图、控制器和模型,并位于apps=>plugins目录下的一个目录中

它工作得很好,但需要相当多的计划来确保你不会创建不必要的应用程序或陷入困境的代码

有关插件的更多信息,请点击此处:

我有一些CakePHP应用程序,我的首选是为每个站点提供一个应用程序,并共享蛋糕源代码。插件作为创建特性和可重用功能的一种方式非常简洁。它们保持了主代码库的轻量级,我同意这会有所帮助。它们不会帮助您自定义应用程序的路由或配置

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

在我看来,任何偏离“CakePHP方式”的做法都不理想,在一个应用程序代码库上运行多个站点有多复杂

挑战

  • 你所有的路线都一样吗,或者有些站点需要不同的规则
  • 您的功能是否与所有站点相同,或者是否存在一些可能导致您破解核心代码的差异
  • 想象一下,在任何配置或app_controller.php中都会出现这种情况

    if($domain == 'first.example.com'):
    #This is the first time I override this value, is it the last?
    endif;
    
    我发现我的开发时间被花在寻找聪明的方法来抽象这个网站上,而这个网站并没有尽头。这不是我渴望的核心功能

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

    为什么

    您的站点变得更易于测试和管理。每个站点都有自己的缓存和日志位置,这很有帮助,因此,如果确实发生了什么事情,您就有了更集中的调试时间。你甚至可以在所有网站上共享你的插件目录。这样做比较容易,因为管理多个环境的复杂性需要考虑

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

    如果你决定为每个站点使用一个应用程序。这类似于我的文件夹结构

    /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个应用程序来处理所有插件,但它从来都不太正确。

    非常感谢您的回答,看起来非常有趣。基本上你是说我应该把每个迷你网站都创建成一个插件,rig