かなり複雑なルーティングルールがありますが、これはカスタムコードでのみ実現可能であり、デフォルトルーターでは実現できません。
ルーターは、ドメイン名も考慮に入れる必要があります。
を受け入れRequest
てバンドル/コントローラー名を返すメソッドを持つ独自のルータークラスを定義することは可能ですか(そしてどのように)?
あなたが求めていることを達成するために、ルーターを完全に再定義する必要はありません
UrlMatcherInterfaceを実装する独自のクラスを作成するだけです。スキームに一致するURLも生成できるようにする場合は、UrlGeneratorInterfaceをオーバーライドする別のクラスも作成する必要があります。
ドメイン名を考慮するために、コンストラクターに渡されるRequestContextを使用する必要があります(これは十分に文書化されていませんが、詳細についてはRouter :: get {Matcher、Generator}を確認してください)。
クラスの準備ができたら、バンドル内のパラメータ「router.options.generator_class」と「router.options.matcher_class」をオーバーライドするだけで、クラスをルーターに挿入できます。
ただし、それはあなたが望むものにとって最良のアプローチではないかもしれません-そのようなルーターの部分をオーバーライドするには、すべてのキャッシュを保持するために多くの注意が必要です。
Symfony2の通常のルーターの使用を検討することもできますが、リクエストのドメインに応じて異なるルートファイルを渡します。これは、ドメイン名に応じて変数を設定したり、別のフロントコントローラーを実行したりするようにWebサーバーを構成すると、簡単に実行できます。
その情報を使用して、リクエストごとに異なる「環境」をロードできます。異なる環境間の唯一の違いは、異なるルーティングファイルを使用することです。
Matthias Nobackのチュートリアルを勉強した後、CRUDルーティングビルダーに少し変更を加えました。
CrudLoaderを使用する前と後は、routing / crud/acompetencies.ymlで確認できます。
このCrudLoaderクラスでわかるように、これは単なる回避策またはリソースの誤用です。
それが正しいか悪いかはわかりません。それはうまくいくようです。
カスタムルーティングクラスクラスを持つsonataadminバンドルを参照してください
symfony 2.5には、カスタムマッチャーのパラメーターが必要です:router.options.matcher_base_classとSymfony \ Component \ Routing \ Matcher\RequestMatcherInterfaceを実装するクラス