如何繼承和重寫一個Bundle的某部分

###添加getParent方法php

// src/UserBundle/UserBundle.php 
namespace UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class UserBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle'; #這裏便是你須要重寫某Bundle的名稱
    }
}

###重寫Controllerhtml

// src/UserBundle/Controller/RegistrationController.php
namespace UserBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;

class RegistrationController extends BaseController//繼承須要重寫Controller
{
    public function registerAction()
    {
        //調用父類方法;也能夠不調用徹底使用本身的邏輯
        $response = parent::registerAction();

        // 能夠作一些本身的事情
        return $response;
    }
}

這種方式只會在你的模板或路由中使用標準的寫法FOSUserBundle:Registration:register來引用該控制器,纔會起做用spa

###重寫資源:模板和路由等翻譯

建立和父類同樣的位置資源文件便可,例如我常常會重寫FOS中 layout.html.twig文件;該文件在 FOSUserBundle中的位置是 Resources/views/layout.html.twig,咱們在本身的Bundle中便可也建立Resources/views/layout.html.twig來重寫覆蓋,路由文件也同樣code

重寫資源僅僅當你引用該資源的時候使用完整的路徑的方法的時候起做用(FOSUserBundle/Resources/config/routing/security.xml);若是你使用@BundleName 快捷方式來引用資源是不起做用的;xml

###注意 翻譯和驗證文件不是經過這種方式來重寫覆蓋的htm

相關文章
相關標籤/搜索