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