我需要创建一个这样的网站:
听起来不是很复杂吧?这就是我现在的想法(显然我不确定这是最好的方式,这就是我要求建议的原因):
我对这个系统的主要担忧是2:
也许我担心太多了,我担心的不是这个问题,但我想知道是否有人对替代配置有任何建议。例如,有一个主页面(cakephp应用程序),它将是主页,每个迷你网站都是一个子应用程序(也在cakephp中),其访问权限将由主应用程序控制。通过这种方式,它将更加井井有条,每个迷你站点都位于不同的文件夹中,具有自己的控制器,视图,模型或其他需要的任何内容,并且具有所需的复杂性。我甚至不知道这是否可行,或者服务器和文件夹的配置如何。我对CakePHP有一些经验,但不是那么多。
非常感谢任何想法/建议!
答案 0 :(得分:1)
如果你真的在构建多个应用程序,那么cake有一个内置的“插件”架构,允许你在插件结构中构建独立的应用程序,这个应用程序位于主应用程序层的顶层。
我们在这里开发的工作有一个主应用程序级别,可以管理所有用户数据,身份验证,ACL,并具有一些实用功能,可以覆盖所有应用程序,包括通知。
然后我们就像蛋糕一样调用插件,例如票务,文件共享和CMS。每个看起来像Cake应用程序,有自己的视图,控制器和模型,并坐在apps =>下的目录中插件目录。
它运作良好,但需要相当多的计划,以确保您不会创建不必要的应用程序或嵌套代码的鸟巢。
有关插件的更多信息: http://book.cakephp.org/view/1111/Plugins
答案 1 :(得分:1)
我有几个CakePHP应用程序,我的偏好是为每个站点都有一个应用程序并共享蛋糕源。插件很简单,可以创建功能和可重用的功能。他们保持主要代码基础轻量级,我同意这有帮助。它们不会帮助您自定义应用程序的路由或配置。
当我第一次为我的项目研究这个时,我探索了使用插件作为选项,但看到缺乏对核心配置和路由的标准控制作为一个痛点。如果您有多个站点,则访问此环境中的数据库或任何数据源可能会变得乏味。特别是如果每个站点都有自己的数据源,路由和配置。
我看到它的方式偏离“CakePHP方式”并不理想,在1个应用程序代码库中运行多个站点有多复杂?
挑战
想象一下这在任何配置或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个应用程序来处理所有插件并不是非常正确。