我们有一个用PHP Symfony框架开发的产品。我们现在有几个客户为我们维护不同的代码库和数据库(MySql)。
他们使用子域名访问各自的代码库,如client1.myproduct.com和client2.myproduct.com
现在我们要为两个客户端创建一个代码库,并且只保留两个子域中不同(逻辑方面)的文件。
因此,两个子域都将指向相同的代码库,但会在需要时访问各自子域中的文件,即每当客户端的某些功能的逻辑不同时。
任何人都可以建议最好的方法是什么?
答案 0 :(得分:4)
网站:[foo.com,bar.co.uk,www.mike.es]
// index.php
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
// get the domain
$domain = $_SERVER['SERVER_NAME'];
// get rid of www, com, es etc ...
foreach(array('www.', '.com', '.es', '.co.uk') as $crap) {
$domain = str_replace($crap, '', $domain);
}
$confs = array(
'foo' => 'somefoo',
'bar' => 'somebar',
'waz' => 'andwazconfig'
);
$cfg = (!empty($confs[$domain]))
? $confs[$domain]
: 'default';
$configuration = ProjectConfiguration::getApplicationConfiguration($cfg, 'prod', false);
sfContext::createInstance($configuration)->dispatch();
// End of index.php
希望这有帮助
答案 1 :(得分:2)
是的,你可以这样做。 Symfony Routing可以处理这个用例,但它不是一个更容易完成的任务。有关详细说明,请查看Symfony-Documentation:http://www.symfony-project.org/more-with-symfony/1_4/en/02-Advanced-Routing
答案 2 :(得分:0)
我已经描述了使用sfDomainRoutePlugin在Symfony here中使用动态子域。
但是,您需要重写大部分现有应用程序逻辑以支持同一应用程序中的多个客户端,并且还必须合并两个旧数据库。
答案 3 :(得分:0)
我要求提供相同的信息,并有机会收到迈克和法比安的回复。以下是详细信息:
对于具有子域的一个逻辑:http://trac.symfony-project.org/wiki/HowToDoMultipleSitesWithSingleCore
基于相同配置的多个站点 这可能是一个奇怪的主题,但我想配置我们对子域的访问,所有子域都具有SSL访问权限。我们需要不同的站点,因为SSL强制基于IP的虚拟域,这意味着我们的文档根源不同。如:
•www.mydomain.com •admin.mydomain.com •parents.mydomain.com 但是,这些都是具有相同核心架构和插件的站点。这种配置的优点是:
•共享模型文件:所有XxxPeer类将跨应用程序链接 缺点:
•您现在需要监控2-n个不同的缓存/日志。 如果查看典型的Symfony目录结构,可以将其分解为两个类型组:
•共同目录: ◦batch ◦config ◦data ◦doc ◦lib ◦plugins ◦test •特定应用目录: ◦apps ◦cache ◦log ◦web 以下是我采取的步骤:
•开发www.yourdomain.com架构和站点。一旦开始合并,您就可以开始开发其他站点了。 •在新站点中,通用目录的符号链接 •在新站点中,创建特定于应用程序的目录 ◦注意:在Web目录中,您可能需要复制一些原始内容(css,js和.htaccess文件)。当您开始启动新网站时,请牢记这一点。 •运行命令 symfony fix-perms ◦注意:对我来说,Virtualmin使用新的用户名创建这些新站点。您必须确保所有特定于应用程序的目录都由该用户名拥有,因此您的clear-cache命令和日志记录命令可以正常工作。 •现在,您已配置项目。你开始做: ◦symfonyappMYAPP ◦symfony模块MYAPP MYMODULE ◦... •您现在将发现您的apps / MYAPP / modules / MYMODULE已创建,并且您拥有对整个数据库的完全对等访问权
这是关于一个具有不同域名的逻辑的fabien:client1.com client2.com使用相同的应用程序。
对于具有不同域的一个逻辑: “您可以将它们全部指向同一个前端控制器,然后使用过滤器或操作父类来执行更改站点模板等操作。但是,每个域的前端控制器可能更高效,并且非常好要走的路。
每个域都可以拥有自己的应用程序,但大部分逻辑应该在插件中实现,因此可以为需要它们的每个域/应用程序启用它们,并根据需要进行共享。我猜,每个应用程序需要多少代码取决于网站实际上的差异。 “