2011-09-21 73 views
14

我们正在创建一个监视某些资产的SaaS。这意味着它需要数据,将其保存并显示在Web界面中。如何与多个项目共享Symfony2模型

对于这一点,我们有我们与/创建了几个部件正在向Symfony2的:

  • 一个前端Web应用程序,用户可以查看他们的数据
  • 后端管理Web应用程序,在那里我们创建新的显示器,用户等
  • 的API
  • 从队列中检索接收到的数据,并把它在我们的数据库中(这是现在一个单独的脚本,但我想这返工作为的应用由cron调用的Symfony命令)

所有这四种应用共用同一个模型:我们主要的数据库保存所有用户,显示器和数据。

我的问题是:我应该如何在Symfony2中构建这些项目

  1. 我是否创建了一个独立的包,它包含我的数据库的实体,并让这四个项目包含这些实体并与它们一起工作?
  2. 我可以在我的Symfony应用程序文件夹中创建一个'model'目录,该目录由我的/ src目录中的所有包使用?
  3. 一些其他更干净的方法来做到这一点?

选项1似乎有点奇怪,因为根据我的理解,捆绑包需要路由,视图,控制器等。仅将它用于实体会有点奇怪。

选项2看起来没问题,因为/ app文件夹对于/ src文件夹中的所有内容(因为例如参数也驻留在此处)被认为是“共享”。但是,这里没有“模型”文件夹,我不确定应该有什么?

我知道Symfony 2已经很少有'最佳实践'了,因为它是全新的。但我想看看在你看来,是否有其他做法比其他做法更可取。

欢迎任何反馈意见。 由于提前,

迪特

回答

6

什么我目前做的是第一个选项:为您的实体单独的包。 这就是我存储固定装置,实体,表单和实体相关测试的地方。

一束确实需要有路由,控制器,视图等。我确实遇到过一个蓝图捆绑,并且它是所有与它船蓝图CSS资源,使他们能够轻松地在项目重用。

至于将模型添加到应用程序目录...我不喜欢那样。我将app目录看作所有配置应该在的地方。即使您可以覆盖app/Resources下的视图,但每当我想重写某些内容时,我都会创建一个新的包。

+0

这就是我需要知道的:)谢谢! – Dieter

1

我自己并没有在真实世界的symfony2应用程序中使用这种技术 - 但它是一个指针,当你问任何反馈。

service container似乎是Smyfony2方法使服务在全球范围内可用。所以在你的情况下,模型访问对象将被定义为在提供的链接中讨论的服务,然后可以从任何包中使用。

现在服务对象在哪个包中?我们可以将它们放入一个单独的包中,因为它们在其他包中共享。但是,我假设该模型对于所有包都不完全对称,因此我们可以将共享模型放入单独的包中,并将包专用实体放入包中。然后,上面链接中讨论的注射技术可用于提供特定于每个束的完整模型。

这似乎提供了最大的去耦。

我对这方面的任何反馈都很感兴趣,因为这是一种常见的设计方案。

问候。

+0

嗨m8,感谢您的反馈。对于我的特定场景,自定义回购是我需要的,我把它们放在一个'共享'模型捆绑中。实体和实体测试等也到那里去了。但是,我正在创建一个必须共享的服务,但这与我的模型(在一种情况下发送短信)无关。还不确定如何构建,但我正在和你一样思考。我很确定我会把它们放在一个单独的包中,在那里可以共享所有的服务。不知道这是否是要走的路? – Dieter

相关问题