如何使用包继承覆盖一个包的部分
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何使用包继承覆盖一个包的部分
在使用第三方捆绑包时,您可能会遇到这样的情况:您希望用您自己捆绑包中的一个文件覆盖第三方捆绑包中的一个文件。ob娱乐下载Symfony为您提供了一种非常方便的方法来覆盖包中的控制器、模板和其他文件资源/
目录中。
例如,假设您正在安装FOSUserBundle,但你想覆盖它的基础layout.html.twig
模板,以及它的一个控制器。假设你也有自己的AcmeUserBundle
您希望覆盖的文件驻留的位置。首先注册FOSUserBundle
作为捆绑包的“父”:
12 3 4 5 6 7 8 9 10 11 12
/ / src / Acme / UserBundle / AcmeUserBundle.php名称空间Acme\UserBundle;使用ob娱乐下载\组件\HttpKernel\包\包;类AcmeUserBundle扩展包{公共函数getParent(){返回“FOSUserBundle”;}}
方法的几个部分进行了简单的更改FOSUserBundle
只需创建一个同名文件。
请注意
尽管有方法名,但两者之间没有父/子关系
捆绑包,它只是一种扩展和覆盖现有捆绑包的方法。
压倒一切的控制器
类中添加一些功能获取registerAction
的RegistrationController
住在里面FOSUserBundle
.要做到这一点,只需创建自己的RegistrationController.php
文件,覆盖bundle的原始方法,并改变它的功能:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / Acme / UserBundle /控制器/ RegistrationController.php名称空间Acme\UserBundle\控制器;使用”丛书\UserBundle\控制器\RegistrationController作为BaseController;类RegistrationController扩展BaseController{公共函数获取registerAction(){$响应=父::获取registerAction ();/ /……做定制的东西返回$响应;}}
提示
根据需要改变行为的严重程度,您可能会调用父:获取registerAction ()
或者完全用你自己的逻辑取代它的逻辑。
请注意
只有当bundle引用使用标准的控制器时,以这种方式重写控制器才有效FOSUserBundle:登记:登记
路由和模板中的语法。这是最好的做法。
重写资源:模板、路由、验证等
大多数资源也可以被覆盖,只需在与父包相同的位置创建一个文件即可。
例如,通常需要重写FOSUserBundle
的layout.html.twig
模板,以便它使用应用程序的基本布局。因为文件存在于资源/视图/ layout.html.twig
在FOSUserBundle
,您可以在相同的位置创建自己的文件AcmeUserBundle
.ob娱乐下载类中的文件将被忽略FOSUserBundle
完全正确,用你的文件代替。
路由文件、验证配置和其他资源也是如此。
请注意
方法引用资源时,重写资源才有效@FosUserBundle /资源/ config /路由/ security.xml
方法。如果不使用@BundleName快捷方式引用资源,则不能以这种方式覆盖它们。
谨慎
翻译文件的工作方式与上面描述的不一样。读如何覆盖一个包的任何部分如果您想学习如何重写翻译。