Symfony 2网页中给出的示例
Namespace Bundle Class Name
Acme\Bundle\BlogBundle AcmeBlogBundle
Acme\Bundle\Social\BlogBundle AcmeSocialBlogBundle
Acme\BlogBundle AcmeBlogBundle
我的供应商名称大9个字符,但如果它位于MyVendorName/ForumBundle
目录中,我发现MyVendorNameForumBundle.php
和类名MyVendorName/ForumBundle
是多余的。
如果我只是将我的小班ForumBundle
命名为我想要分享,它会给我带来未来的问题吗?显然,命名空间仍然是MyVendorName/ForumBundle
。
该类实际上是在某个地方使用过的,还是只是一次性配置?
我主要担心的是,每次我需要访问它时,我都不想使用大名称(例如MyVendorName/MyVendorNameForumBundle::someMethod()
)。
也许这不是正确的,我是Symfony 2的新手。
由于
答案 0 :(得分:1)
首先,我不会想象来自Acme\Bundle\BlogBundle
的名称空间AcmeBlogBundle
。更合适的是Acme\BlogBundle
,这会产生AcmeBlogBundle
。如果您执行了Acme\Bundle\BlogBundle
,则类名实际上可能最终为AcmeBundleBlogBundle
。
供应商名称包含在类中以防止冲突。如果其他人决定为他们的捆绑课程BlogBundle
命名怎么办?
我也无法想象你曾经调用过一个直接属于Symfony2包的根类的方法。
通常,Symfony2将为您提供快捷方式,以帮助您获得所需的最常见内容。例如,当您在routing.yml
中引用控制器时:
AcmeSocialBlogBundle:Default:show
它实际上将解析为
Acme\SocialBlogBundle\Controllers\DefaultController::showAction
我的建议? 放松。 Symfony2开发团队已经用快捷符号解决了这个问题。遵循php app/console generate:bundle
命令生成的约定作为起点,其他所有内容都将落实到位。以下是一些有效的命名空间:
Acme\Plugins\BlogBundle
Acme\BlogBundle
Acme\ClientName\BlogBundle
sjagr\MyAwesomeBundle <-- See how I made my Github username a vendor name?
我的警告是,当你试图反对框架建议时,你会后悔重新审视这个决定。我已经这样做了,而且我目前正在重写Symfony2应用程序,我希望我先花时间做正确的事。