php – 具有共享代码库的多实例symfony应用程序

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 具有共享代码库的多实例symfony应用程序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
因此,我在Symfony 3之上安装了一个大型SAAS Web应用程序.从大约10到20个应用程序开始,现在已经发展到500多个应用程序.每个应用程序单独的供应商目录大小为150 MB.

所有这些应用程序都有自己的数据库我想保持这种方式.但是,我相信如果共享一些代码会很好.以vendor和src目录为例.它在每个应用程序中都是相同的,但是所有这些都在Opcache中单独“加载”.我相信,从资的角度来看,最好是共享这些目录.

Composer和Symfony似乎都不支持具有共享目录的多实例应用程序.我想知道是否有人有任何线索来实现我的想法或我的计划是不可行的?

每个应用程序(parameters.yML)的配置不同,并且web目录包含每个应用程序的不同样式表.所以他们需要与其他人分开.

我一直在考虑使用环境设置,但是我们感觉环境“test”,“dev”,“application1”,“application2”等等.对于config_PRod.yml突然也变得无法使用了.

我的思维方式错了吗?有关如何实现这一目标的任何建议?或者应该选择一个完整的单独实例?

(我们的应用程序正在使用SEMVer,如果我们有1.0.0版本的共享代码,版本1.1.0等,它甚至会很好.所以这甚至是下一层.但也许这是下一步.)

编辑:
澄清一点;
从本质上讲,您可以说web目录和VAR目录都是不可共享的. Web目录包含自定义样式表,是主要入口点. var目录包含缓存文件,每个应用程序的缓存文件不同,具体取决于其数据库设置.
最后,您还拥有自定义参数文件,该文件与存储数据库凭据的应用程序不同.

我尝试过symlinking,但作曲家对此并不满意.此外,使用符号链接时,工作目录始终是实际使用的目录,而不是您符号链接的实际目录.
我还尝试了应用程序的vhost文件中的自定义设置.可以覆盖缓存和内核目录,但是再次松开了您正在进行符号链接的实际目录.

解决方法

您需要创建自定义配置目录和/或文件,然后根据您使用的任何条件调整AppKernel以指向正确的AppKernel.例如,如果您要离开子域:
首先,更新您的前端控制器以获得新的超级全局.可能有更好的方法做到这一点,我建议调查一下..

// web/app.PHP
use Symfony\component\HttpFoundation\Request;

/** @var \Composer\Autoload\ClassLoader $loader */
$loader = require __DIR__.'/../app/autoload.PHP';
include_once __DIR__.'/../var/bootstrap.PHP.cache';

list($scheme,$host) = explode('.',$_SERVER['SERVER_NAME']);
define(APP_CONfig_FILENAME,sprintf('@L_406_29@.yml',$host));

$kernel = new AppKernel('prod',false);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);

// When using the HttpCache,you need to call the method in your front controller instead of relying on the configuration parameter
//Request::enableHttpMethodParameteroverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request,$response);

现在在你的AppKernel中,使用这个新的超全局

// app/AppKernel.PHP
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load($this->getProjectDir().'/app/config/' . APP_CONfig_FILENAME . '.yml');
    }
}

然后在你的example1.yml中

# app/config/mysubdomain.yml
imports:
    - { resource: 'parameters_example1.yml' }
    - { resource: 'routing_example1.yml' }

脚本宝典总结

以上是脚本宝典为你收集整理的php – 具有共享代码库的多实例symfony应用程序全部内容,希望文章能够帮你解决php – 具有共享代码库的多实例symfony应用程序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。