Symfony2中的包应该代表什么

Cze*_*ogy 32 php bundle symfony

这对您来说可能是显而易见的事情,但是 - 即使在阅读了大量手册和博客之后 - 我仍然不确定Symfony2中的捆绑包究竟应该在网页中代表什么.从简单的演示应用程序中很难猜到它.

例如:我有一个分为两个部分的网站(一个是二级域example.com,另一个是dom2.example.com).这两部分中的每一部分都有自己的一些部分 - 有时相同(如新闻)有时会有所不同.

symfony2中正确表示的是什么?我应该

  • a MySite\site1MySite\site2捆绑并通过不同的控制器执行不同的部分,或
  • 捆绑Site1\NewsSite2\News,或
  • MySite\Site1NewsMySite\Site2News

......或者我在这方面犯了错误?

Jer*_*rne 15

我也是Symfony的新手,我会兴趣地关注这个问题的结果,但是对于它的价值,我的看法是:

捆绑包就是:一组文件,资产,PHP类和方法,测试等.分组的逻辑可以是你喜欢的任何东西.在某些情况下,分组是什么以及为什么要这样做是非常明显的 - 例如,如果我为Symfony2编写博客系统并想要发布它,我会把它变成一个包.这是文档中最常用的一种示例.

但是你也可以将捆绑包用于你想要发布的任何一个小功能.比如说,这个包为所有控制器创建默认路由.它不是一个完全开发的插件/功能,如博客或论坛,但它是一些我可以轻松导入到我的项目中的代码,它与其他一切完全分开,它是一个捆绑.

最后,您还可以在内部对项目使用bundle,绝对是对您有意义的任何方式.


我对你的具体情况的看法:

快捷方便:

  • MySite\MyCode - 完成工作,也许你没有任何合理的方法来分解你要编写的代码.

如果两个站点之间有一些更独特的功能,并且您希望将它们分开以便清楚:

  • MySite\SharedFeatures
  • MySite\Site1Features
  • MySite\Site2Features

如果你真的喜欢它的一切,或者你有一个复杂的项目,也许:

  • MySite\MySiteMain (共享功能和全能杂项,不值得拥有自己的捆绑)
  • MySite\News
  • MySite\Site1FeatureSomethingOrOther
  • MySite\Site2FeatureSomethingOrOther

我绝对认为你想坚持逻辑组代码 - 所以我认为你的例子"捆绑Site1\News和Site2\News"和"MySite\Site1News和MySite\Site2News"不是最好的方法.Site1和Site2是实现,因此为每个站点的新闻页面单独创建一个捆绑包对我来说似乎适得其反; 你想制作一个新闻组件并构建它以两种不同的方式使用.

至于您的双域问题,您可以将两个域指向相同的代码,并在代码中测试所请求的域,或者您可以检出相同代码的两个副本并稍微更改配置文件(这不一定违反DRY的想法,因为你仍然在一个地方编辑代码,然后更新两个副本.)


ner*_*ess 11

我理解捆绑的方式是它类似于CMS,例如Typo3或Drupal称为"插件".因此,理想情况下它应该是自包含的,并且可以在其他项目中使用.

例如,在您的情况下,我将创建一个"staticHtmlBundle",其中包含您网站的所有静态页面,由site.com和dom2.site.com分隔.

然后我会创建一个包含所有新闻文章的"newsBundle",甚至可能是数据库驱动的一个小管理部分,您可以编辑它们并将它们分配到不同的渠道(在您的情况下是site.com,dom2. site.com).staticHtmlBundle中的静态页面将调用newsBundle并显示其数据(例如,新闻的listView或detailView等).

如果您将所有内容保持为抽象和可重用,那么您甚至可以在Symfony 2 Bundle存储库中发布newsBunde并与社区共享!