1

かなり複雑なルーティングルールがありますが、これはカスタムコードでのみ実現可能であり、デフォルトルーターでは実現できません。

ルーターは、ドメイン名も考慮に入れる必要があります。

を受け入れRequestてバンドル/コントローラー名を返すメソッドを持つ独自のルータークラスを定義することは可能ですか(そしてどのように)?

4

4 に答える 4

4

あなたが求めていることを達成するために、ルーターを完全に再定義する必要はありません

UrlMatcherInterfaceを実装する独自のクラスを作成するだけです。スキームに一致するURLも生成できるようにする場合は、UrlGeneratorInterfaceをオーバーライドする別のクラスも作成する必要があります。

ドメイン名を考慮するために、コンストラクターに渡されるRequestContextを使用する必要があります(これは十分に文書化されていませんが、詳細についてはRouter :: get {Matcher、Generator}を確認してください)。

クラスの準備ができたら、バンドル内のパラメータ「router.options.generator_class」と「router.options.matcher_class」をオーバーライドするだけで、クラスをルーターに挿入できます。


ただし、それはあなたが望むものにとって最良のアプローチではないかもしれません-そのようなルーターの部分をオーバーライドするには、すべてのキャッシュを保持するために多くの注意が必要です。

Symfony2の通常のルーターの使用を検討することもできますが、リクエストのドメインに応じて異なるルートファイルを渡します。これは、ドメイン名に応じて変数を設定したり、別のフロントコントローラーを実行したりするようにWebサーバーを構成すると、簡単に実行できます。

その情報を使用して、リクエストごとに異なる「環境」をロードできます。異なる環境間の唯一の違いは、異なるルーティングファイルを使用することです。

于 2012-07-07T05:16:30.353 に答える
1

Matthias Nobackのチュートリアルを勉強した後、CRUDルーティングビルダーに少し変更を加えました。

CrudLoaderを使用する前と後は、routing / crud/acompetencies.ymlで確認できます。

このCrudLoaderクラスでわかるように、これは単なる回避策またはリソースの誤用です。

それが正しいか悪いかはわかりません。それはうまくいくようです。

于 2012-10-25T01:13:31.887 に答える
0

カスタムルーティングクラスクラスを持つsonataadminバンドルを参照してください

于 2012-07-06T21:55:46.317 に答える
0

symfony 2.5には、カスタムマッチャーのパラメーターが必要です:router.options.matcher_base_classとSymfony \ Component \ Routing \ Matcher\RequestMatcherInterfaceを実装するクラス

于 2014-10-08T23:47:13.267 に答える