Symfony 2捆绑名称,使用类的短名称

时间:2015-01-28 21:15:30

标签: symfony

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的新手。

由于

1 个答案:

答案 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应用程序,我希望我先花时间做正确的事。