2013-10-28 51 views
2

我將在我的Symfony 2應用程序中創建一個模塊系統。每個模塊都是一個捆綁包。Symfony 2動態加載路線

我不知道如何我可以從文件中動態(在我的服務代碼)負載的路由(如AcmeSomeModuleBundle /資源/配置/ routing.yml中),並與一些前綴(或主機)應用它們。喜歡它的嵌入代碼如下做過應用程序/配置/ routing.yml中

berg_applications: 
    resource: "@AcmeSomeModuleBundle/Resources/config/routing.yml" 
    host: foobar.com 

任何解決方案?

+0

這可以幫助你:http://symfony.com/doc/current/cmf/book/routing.html#the-dynamicrouter – Brewal

+0

嗯,我認爲這對我不是很有幫助:/ – Kofel

+0

爲什麼你不能按照Symfony手冊的方式進行操作? – vascowhite

回答

3

您需要自定義路由裝載機IMO:http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html

對於一個項目,我必須建立其由通過捲曲從遠程URL抓取它們加載路徑的路徑加載它完美地工作。

文檔非常清晰,當您查看示例時,您自己創建文檔非常容易。基本上,關鍵的東西是:

  • 「type」當你定義一個路由資源。您應該製作自定義類型,以便您的路由加載程序識別它並將其用於處理。
  • ::load()方法。

如果您有任何具體的問題,你偶然發現不要猶豫,發表評論的問題。基本上,您的RouteLoader將會在其load方法中收到「資源」,並且應該盡其所能來添加新的RouteRouter

+0

非常感謝。這就是我一直在尋找的。 :) – Kofel

0

如果你爲每個模塊做了一個真正的bundle方法,那麼完成你想要做的事情的最簡單方法就是使用帶有基於屬性路由的JMS Security-Extra bundle。

要將composer.json文件,補充一點: 「規定」:{ ... 「JMS /安全外束」: 「1.5 *」,

更新您的作曲家文件,

php composer.phar update 

然後在你的BUNDLENAME /資源/配置/ routing.yml中的文件這樣做:

some_name: 
    type:  annotation 
    resource: "@SomeBundle/Controller" 

最後,在C每個動作ontroller,用@Route屬性裝飾它:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 

/** 
* @Route("/SomeBundle/SomeController") 
*/ 
class SomeController extends Controller { 
    /** 
    * @Route("someAction", name="myAction") 
    * @Method("GET") OR 
    * @Method({"GET", "POST"}) 
    */ 
    public function someAction() { 
    } 
} 

JMS包中的一些其他屬性使事情變得非常好。例如,我對我的操作使用@Template屬性相當多。這意味着我不再需要做的:

public function recentListAction() { 
    ... 
    return $this->render(
     'AcmeArticleBundle:Article:recentList.html.twig', 
     array('articles' => $articles) 
    ); 
} 

我可以簡單地做:

/** 
* @Route("/Articles/List") 
* @Template() 
*/ 
public function recentListAction() { 
    ... 
    return array('articles' => $articles); 
} 

而且只要我有一個資源/視圖/ ControllerName/recentList.html.twig文件,一切將自動爲我編織。