同一个Symfony2应用程序中的多个应用程序

时间:2015-12-24 15:44:23

标签: symfony doctrine-orm

这是一个相当长的问题,但它有很多。 感觉它应该是一个相当常见的用例,所以我希望Stack Overflow社区可以为我提供“Symfony2”答案的最佳实践。

我在下面描述的解决方案有效,但我想避免一些后果:

  1. 在我的本地开发环境中,如果我使用了错误的数据库连接,则测试将在dev中运行但在生产时失败
  2. 可以在PUBLIC API网址上访问ADMIN API的路由,只是被拒绝。
  3. 如果我在我的开发环境中有一个镜像(使用相应的parameters.yml文件进行3次单独检查),那么其他包的功能测试将失败
  4. 是否有“Symfony2的最佳实践”方式来设置我的项目?

    我们正在运行LAMP堆栈。我们使用git /(Atlassian)stash进行版本控制。 我们正在使用ORM和FOS-REST的学说与OAuth以及symfony防火墙来验证和授权用户。 我们致力于使用Symfony2,因此我正在努力寻找“最佳实践”解决方案:

    我有一个包含3个应用程序的项目:

    1. 面向公众的API(提供对数据的只读访问权限)
    2. 受保护的API(提供管理功能)
    3. 一组批处理(例如导入数据和监控数据质量)
    4. 每个应用程序都使用一组共享模型。

      我创建了4个捆绑包,每个捆绑包用于应用程序,第4个捆绑包用于共享模型。

      每个应用程序必须使用不同的数据库用户来访问数据库。 只有一个数据库。 有几个表,一个叫做'价格'

      只能从一个主机名访问admin API(例如admin-api.server1) 只能从不同的主机名访问公共API(例如public-api.server2) 每个应用程序都托管在不同的服务器上

      在我的开发环境中的parameters.yml中,我有这个     // parameters.yml     api_public_db_user:user1     api_public_db_pass:pass1

      api_admin_db_user: user2
      api_admin_db_pass: pass2
      
      batch_db_user: user3
      batch_db_pass: pass3
      

      在config.yml中我有这个:

      // config.yml
      doctrine:
          dbal:
              connections:
                  api_public:
                      user:     "%api_public_db_user%"
                      password: "%api_public_db_pass%"
                  api_admin:
                      user:     "%api_admin_db_user%"
                      password: "%api_admin_db_pass%"
                  batch:
                      user:     "%batch_db_user%"
                      password: "%batch_db_pass%"
      

      在我的代码中,我可以这样做(我相信这也可以从服务容器中完成,但我还没有那么远)

      $entityManager = $this->getContainer()->get('doctrine')->getManager('api_public');
      $entityRepository = $this->getContainer()->get('doctrine')->getRepository('CommonBundle:Price', api_admin');
      

      当我将代码部署到每个实时服务器时,我将其中的垃圾值放在parameters.yml中以供其他应用程序使用

      // parameters.yml on the public api server
      api_public_db_user: user1
      api_public_db_pass: pass1
      
      api_admin_db_user: **JUNK**
      api_admin_db_pass: **JUNK**
      
      batch_db_user: **JUNK**
      batch_db_pass: **JUNK**
      
      1. 我已锁定我的应用程序,因此无法访问数据库(因此其他API功能不起作用)
      2. 我还设置了Symfony防火墙安全性,以便不同的路由需要不同的权限
      3. apache vhost中还有安全措施拒绝从公共api目录中说出admin api路径。
      4. 所以,我已经保护了我的应用程序并满足了安全审计的要求,但开发过程并不理想,而且感觉不对。

        作为背景:

        • 我们之前已经考虑将其拆分为同一项目中的不同应用程序(例如Symfony2 multiple applications and api centric application。实际上遵循此方法http://jolicode.com/blog/multiple-applications-with-symfony2),但遇到了困难,无论如何,Fabien说不要(https://groups.google.com/forum/#!topic/symfony-devs/yneojUuFiqw)。这在Symfony1中存在并在Symfony2中删除,这对我来说已经足够了。
        • 我们之前已经走下了拆分每个捆绑包并使用composer导入它的路线,但这导致了太多的开发开销(例如,必须修改许多存储库来实现一个功能;它不可能看到所有的单个拉取请求中的功能更改。)
        • 我们收到越来越多的创建API的请求,我们同样担心将每个应用程序放在自己的存储库中。 因此,将三个应用程序中的每一个放在一个单独的Symfony项目/ git存储库中也是我们想要避免的。

0 个答案:

没有答案