2

Symfony 2 アプリでモジュール システムを作成します。各モジュールはバンドルになります。

ファイル (例: AcmeSomeModuleBundle/Resources/config/routing.yml )からルートを動的に (サービス コードで) ロードし、いくつかのプレフィックス (またはホスト) を付けて適用する方法がわかりません。以下のコードをapp/config/routing.ymlに埋め込むことによって行われるように:

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

解決策はありますか?

4

2 に答える 2

3

カスタム ルート ローダー IMO が必要です: http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html

あるプロジェクトでは、ルートを CURL 経由でリモート URL から取得してロードするルート ローダーを構築する必要があり、完全に機能しました。

ドキュメンテーションは非常に明確で、例を見ると、自分で作成するのはばかげているほど簡単です。基本的に、重要なことは次のとおりです。

  • ルート リソースを定義するときは「type」。ルートローダーがそれを認識して処理できるように、カスタムタイプを作成する必要があります。
  • ::load()方法。

遭遇した具体的な問題がある場合は、遠慮なくコメントに質問を投稿してください。基本的に、RouteLoader はそのメソッドで「リソース」を受け取り、 newをloadに追加するために必要なことは何でも行う必要があります。RouteRouter

于 2013-10-28T20:19:21.240 に答える
0

各モジュールに対して真のバンドル アプローチを実行する場合、実行しようとしているものを達成する最も簡単な方法は、属性ベースのルーティングで JMS Security-Extra バンドルを使用することです。

composer.json ファイルに、次を追加します: "require": { ... "jms/security-extra-bundle": "1.5.*",

コンポーザーファイルを次のように更新します

php composer.phar update

次に、BundleName/Resources/config/routing.yml ファイルで次のようにします。

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

最後に、コントローラーの各アクションを @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);
}

Resources/views/ControllerName/recentList.html.twig ファイルがある限り、すべてが自動的に織り込まれます。

于 2013-10-28T20:09:15.780 に答える