从symfony2中的自定义控制器类扩展所有控制器类


Extending all controller classes from my custom controller class in symfony2

就像在Codeigniter中一样,我们有'core'文件夹,我们可以在其中定义我们的自己的控制器就像'MY_Controller',可以用来扩展所有的类来扩展这个控制器,在Symfony2中是否有可能这样做?

在symfony中,我想创建类'MY_Controller',它从基类'Controller'扩展,我希望控制器中的所有类从MY_Controller'类扩展

备注:
当使用Symfony2时,强烈建议您遵循Symfony2编码风格。它与PHP-FIG基本相同,只是有一两个偏差。所以下划线是类名中的禁忌。除此之外:Symfony非常容易使用,并且完全面向对象,因此更改控制器扩展的类就像将extends Controller替换为extends AnotherClass一样简单。
但是现在,symfony2-使用自定义控制器的方式:

你可以做的,是创建一个Core包(CoreBundle以后)。然后,在这个CoreBundle中,定义一个控制器,从Symfony Controller组件扩展。从命令行,在项目根目录下,使用以下命令:

php app/console generate:bundle --namespace=YourNameSpace/CoreBundle --bundle-name=YourNameSpaceCoreBundle

更多选项可以在这里找到
之后,您将在包目录中找到一个DefaultController类。(可能在文件夹src/YourNamespace/CoreBundle/Controller中)。然后,开始生成Core控制器:

php app/console generate:controller --controller=YourNameSpaceCoreBundle:Core

有关如何生成核心控制器的更多选项,请参阅文档。

当你完成了自定义控制器的设置后,你可以在任何其他bundle中随意使用它:

namespace YourNameSpace'AnotherBundle'Controller;
use YourNameSpace'CoreBundle'Controller'CoreController;
class DefaultController extends CoreController
{//extends from your custom controller
}
  • 首先,不要像PSR-0那样使用下划线来命名类,当在类名中使用时,每个下划线字符都会转换为目录分隔符。第二,将控制器设置为<bundledir>/Controller/
  • 第三,将你的控制器命名为BaseController,并从它扩展所有其他控制器。第四,考虑在基本控制器中使用依赖注入而不是耦合功能。