0

私は Symfony2 プロジェクトに取り組んでおり、ルート構成からコントローラーにパラメーターを渡す方法を見つけようとしています。ルート構成でデフォルト値を構成し、関数宣言で適切な var 名を使用してコントローラーで値を取得できることはわかっていますが、それはまさに私が望んでいるものではありません。

私のユースケースは次のとおりです。コントローラーには、2 つまたは 3 つの異なるルートからアクセスしたい標準メソッドがあります。呼び出されているルートに応じて、メソッドを異なる方法で「構成」したいと考えています。これはいくつかの方法で実現できます。

  1. 私のコントローラーでは、`$this->container->get("request")->get("_route") を使用してルート名を確認しますが、これは醜く、ルート名にハードコーディングされています。構成をコントローラーに移動します。これは、構成ではなく、単なるロジックである必要があります。
  2. 基本コントローラ クラスを作成し、異なるルートの各メソッドをサブクラス化します。サブクラス化された各メソッドは、メソッド内に必要な構成を持ちます。#1よりもクリーンなソリューションですが、単純なニーズのために複数のクラスを持つという意味で「重く」、構成データをビジネスロジックにプッシュします。
  3. 構成データをルート構成に入れます。コントローラで、必要に応じて構成データにアクセスします。理想的な解決策ですが、方法がわかりません。

ルートのデフォルト配列を使用して引数を指定できますが、正規表現を使用して、パラメーターが URL レベルでオーバーライドされないようにする必要があります (セキュリティ リスク)。これは機能的ですが、まだちょっとぎこちなく、かなりのハックではありません。

これを行うためのより良い方法があるに違いないと思いますが、それを理解できないようです。コントローラーからルーティング オブジェクトにアクセスし、さまざまな構成パラメーターにアクセスする方法はありますか?

4

1 に答える 1

0

ルーター サービスから実際のルートを引き出すことができます。何かのようなもの:

$routeName = $this->container->get("request")->get("_route");
$router = $this->container->get("router");
$route = $router->getRouteCollection()->get($routeName);

しかし、これが素晴らしいデザインになるかどうかはわかりません。$configName をコントローラー メソッドに渡し、同じ名前のパラメーターを構成ファイルに追加してから、getParameter を使用してアクセスすることを検討してください。それは方程式からルートのものを排除します。

何かのようなもの:

zayso_arbiter_import:
    pattern:  /import
    defaults: { _controller: ZaysoArbiterBundle:Import:index, configName: 'someConfigName' }

public function importAction(Request $request, $configName)
于 2013-05-23T16:29:12.460 に答える