最好的情况下,controller应该在一个可以部署到其它地方的bundle中,那么它不能继承Controller基类。而是通过实现ContainerAwareInterface接口或者继承ContainerAware来取代继承Controller。
Routing
如果bundle提供路由,他们必须使用bundle的别名为前缀,比如一个AcmeBlogBundle实例,所有的路由名必须是acme_blog_ 开头。
Templates
如果bundle提供模板,它必须使用Twig。 bundle不必低通一个主布局文件,如果你的bundle是一个完整的应用程序除外。
翻译文件
如果bundle提供信息翻译,它必须是被定义成XLIFF格式,区域名必须被命名在bundle名字之后,如bundle.hello
配置
为了提供更大的灵活性,一个bundle可以使用Symfony2的内建机制提供配置设置。对于简单的设置,依赖于默认的Symfony2的parameters配置入口。 Symfony2参数都是简单的 key/value 对。值可以是任意的合法的PHP值。 每个参数名应该以讹bundle的别名开始,这只是一个最佳的建议。参数名其余部分用点号(.)分割,比如 acme_hello.email.from
让最终用户可以在配置文件中直接提供值信息。
YAML格式:
# app/config/config.yml parameters: acme_hello.email.from: fabien@example.com
XML格式:
<!-- app/config/config.xml --> <parameters> <parameter key="acme_hello.email.from">fabien@example.com</parameter> </parameters>
PHP代码格式:
// app/config/config.php $container->setParameter('acme_hello.email.from', 'fabien@example.com');
INI格式:
[parameters] acme_hello.email.from = fabien@example.com
这样就可以在代码中从容器获取这些配置信息了:
$container->getParameter('acme_hello.email.from');
如果你定义服务,我们也推荐你使用bundle的别名作为前缀。
总结思考:
以上是关于Symfony2中最主要的插件格式bundle的大体情况,在整个Symfony2为基础开发的应用程序中,几乎全部都是有bundle组成。Symfony2本身的核心组件都是FrameworkBundle。在Symfony2交流社区中,已经有了大量的开发者贡献了他们的bundle,我们可以直接拿来集成到我们自己的应用程序中使用。上面所说的大部分规则,都是应用于你开发贡献bundle时应该遵循的统一规则,以方便其它用户使用。
带有第三方贡献的bundle的Symfony2开发包:
如果你不打算把你的bundle贡献出来,那么完全可以不用按照这里说的大部分规则进行开发。