如何使用包继承覆盖的部分包吗

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.3,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何使用包继承覆盖的部分包吗

使用第三方包时,你可能会遇到一种情况你想覆盖一个文件与文件的第三方包在一个你自己的包。ob娱乐下载Symfony提供了一个非常方便的方式覆盖控制器、模板和其他文件包的资源/目录中。

例如,假设您已经安装了FOSUserBundle,但你想覆盖它的底部layout.html.twig模板,以及它的一个控制器。

首先,创建一个新的包称为UserBundle和在应用程序中启用它。然后,第三方FOSUserBundle注册为“父”你的包:

1 2 3 4 5 6 7 8 9 10 11 12
/ / src / UserBundle / UserBundle.php名称空间UserBundle;使用ob娱乐下载\组件\HttpKernel\\;UserBundle扩展{公共函数getParent(){返回“FOSUserBundle”;}}

通过这个简单的改变,你现在可以覆盖的几个部分FOSUserBundle只需创建一个具有相同名称的文件。

请注意

尽管方法名称,没有父/子关系包,它只是一种扩展和覆盖现有的包。

压倒一切的控制器

假设您想添加一些功能获取registerAction ()RegistrationControllerFOSUserBundle内生活。为此,创建自己的RegistrationController.php文件,覆盖包的原始方法,改变其功能:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / UserBundle /控制器/ RegistrationController.php名称空间UserBundle\控制器;使用”丛书\UserBundle\控制器\RegistrationController作为BaseController;RegistrationController扩展BaseController{公共函数获取registerAction(){美元响应=::获取registerAction ();/ /……定制的东西返回美元响应;}}

提示

取决于严重需要改变行为,你可能会调用父:获取registerAction ()用你自己的或完全取代其逻辑。

请注意

压倒一切的控制器以这种方式只包是指控制器使用标准FOSUserBundle:登记:登记语法在路线和模板。这是最好的练习。

最重要的资源:模板、路由等

大多数资源也可以被覆盖,简单地通过创建一个文件在同一地点你的父母包。

例如,它是很常见的需要覆盖FOSUserBundle的layout.html.twig模板,以便它使用您的应用程序的基本布局。住在自文件资源/视图/ layout.html.twigFOSUserBundle,您可以创建自己的文件在同一UserBundle的位置。ob娱乐下载Symfony将FOSUserBundle完全忽略生活的文件,并使用您的文件。

这同样适用于路由文件和其他资源。

请注意

最重要的资源只能当你的参考资源@FOSUserBundle /资源/ config /路由/ security.xml方法。你需要使用@BundleName快捷方式指资源所以他们可以成功地覆盖(除了模板、覆盖方式不同,作为解释如何覆盖模板从第三方包)。

谨慎

转换和验证文件不工作在上面描述的一样。读作“如何覆盖包的一部分吗“如果你想学习如何重写翻译看看”如何覆盖包的一部分吗”技巧来覆盖验证。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。