2012-06-11 23 views
1

我現在正忙於在項目中工作,我需要的不是捆綁軟件。我稱之爲「模塊」的東西。 它應該不同於捆綁,因爲當項目啓動時系統不知道將使用哪個「模塊」 以及它們將如何配置。Symfony2 - 除了包之外的東西

另外我要去使用類似的這些模塊束

$response = $this->forward('AcmeHelloModule:Hello:fancy'); 

OR

$response = $this->forward('Acme/Hello:Hello:fancy'); 

這裏HelloController-> fancyAction();將被執行。而這個控制器描述文件說/src/modules/Acme/Hello/Controller/HelloController.php

所以問題是如何實現這個?

+0

爲什麼不使用捆綁? symfony唯一知道的是供應商庫,但它們不應該包含控制器代碼。 – room13

+0

創建一個動態CMS需要「模塊」,模塊將被安裝在它中,例如它在Wordpress中,也就是說,它們將由用戶使用鼠標來完成 –

+0

這並不解釋「爲什麼不是一個包」 ?實際上Symfony2只是把它稱爲模塊「捆綁」,但它們不是別的,而只是一種模塊。 S2沒有提供在運行時包含bundle的解決方案並不意味着它根本就是錯誤的(取決於實現;)) – KingCrunch

回答

0

在AppKernel添加以下方法:

public function getBundle($name, $first = true) 
{ 
    if (substr($name, -6) == 'Module')) { 
     return $this->getBundle('ModuleBundle')->getModule($name, $first); 
    } 

    return parent::getBundle($name, $first); 
} 

和所有的邏輯在運行ModuleBundle。 但確保響應的類型與Kernel-> getBundle();相同。

0

解決方案將實現一個可以動態地安裝,加載和運行所謂的模塊的PluginBundle。

PluginBundle根本不包含特定的插件代碼,而是包含您的模塊/插件的運行時環境。然後您可以在數據庫中保存哪些插件/模塊已啓用,並在運行時動態加載它們。

有了這種溶劑,應該可以創建一個動態的插件機制,如wordpress。在運行時修改AppKernel並不是一個好的解決方案,因爲在禁用捆綁軟件時你還必須清除緩存。

相關問題