搜尋

首頁  >  問答  >  主體

Symfony 2 如何擴展第三方方案

在symfony2 的目錄結構裡面 該如何擴展第三方呢?
自己在 vendor 裡面寫 還是有規定目錄格式?
symfony1 裡面提供了helper 的模式,2裡面是否也有相同的機制?

淡淡烟草味淡淡烟草味2753 天前342

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-05-16 16:47:49

    我直接從文檔裡黏來一些程式碼:

    擴充某個bundle,只需要在你自己bundle裡,透過getParent()方法,宣告被擴充的bundle是哪個,下面就是以FOSUserBundle作為擴充物件。

    // src/Acme/UserBundle/AcmeUserBundle.php
    namespace Acme\UserBundle;
    
    use Symfony\Component\HttpKernel\Bundle\Bundle;
    
    class AcmeUserBundle extends Bundle
    {
        public function getParent()
        {
            return 'FOSUserBundle';
        }
    }

    擴充某個Controller比較簡單,直接繼承目標Controller就好了:

    // src/Acme/UserBundle/Controller/RegistrationController.php
    namespace Acme\UserBundle\Controller;
    
    use FOS\UserBundle\Controller\RegistrationController as BaseController;
    
    class RegistrationController extends BaseController
    {
        public function registerAction()
        {
            $response = parent::registerAction();
    
            // ... do custom stuff
            return $response;
        }
    }

    至於其他的如模板、路由等,你要復用、重寫​​哪一個,就在你自己的bundle裡,以相同文件路徑創建就好了。

    文件:http://symfony.com/doc/current/cookbo...

    UPDATE1:

    如果你只是想要加第三方的程式碼進去,按規格是應該放vendors裡,如果你的程式碼符合PSR-0,那就可以實現自動的載入;如果不符合,你要在app/autoload.php裡加對應的include。

    至於是否能夠全域使用擴充後的程式碼,取決於調用,不取決於定義。為了維護的方便,你可以自己抽象interface,或是定義sf2裡的service。

    你可以參考下sf2的bundle的文檔,以及Composer。

    回覆
    0
  • 取消回覆