Symfony 2 包名称,使用 class 的简称

Symfony 2 bundle name, using short name for class

Symfony 2 网页中给出的示例

Namespace                       Bundle Class Name
Acme\Bundle\BlogBundle          AcmeBlogBundle
Acme\Bundle\Social\BlogBundle   AcmeSocialBlogBundle
Acme\BlogBundle                 AcmeBlogBundle

我的供应商名称有 9 个字符大,但我发现如果 MyVendorName/ForumBundle 和 class 名称 MyVendorNameForumBundle.php 已经存在于 MyVendorName/ForumBundle 目录中,那么它是多余的。

如果我只是命名我的主要 class ForumBundle 假设我想分享,它会给我带来未来的问题吗?显然,命名空间还是MyVendorName/ForumBundle.

class 是在某处实际使用还是只是某处的一次性配置?

我主要担心的是我不想在每次需要访问时都使用大名称(例如 MyVendorName/MyVendorNameForumBundle::someMethod())。

也许这不完全正确,我是 Symfony 2 的新手。

谢谢

首先,我无法想象命名空间 Acme\Bundle\BlogBundle 来自 AcmeBlogBundle。更合适的是 Acme\BlogBundle,这将是 AcmeBlogBundle。如果您这样做 Acme\Bundle\BlogBundle,class 名称实际上可能会变成 AcmeBundleBlogBundle

供应商名称包含在 class 中以防止冲突。如果其他人决定将他们的包命名为 class BlogBundle 怎么办?

我也无法想象你曾经调用过直接属于 Symfony2 包的根 class 的方法。

通常,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 应用程序,我希望我一开始就花时间做对了。