0

次のように定義されたルートがあります。

home:
    pattern: /index/index/{show}
    defaults: { _controller: MyBundle:MyIndex:mypage, show: all }
    requirements:
        show:  activeonly|all
        name: ".+"

コントローラーでやりたいことは、 $this->forward ('home', array('show', 'activeonly');

これが可能な場所はどこにもありません。調べてみると、以下の質問と回答がありました。

Symfony 2:ルート名でルートのデフォルトを取得するには? . しかし、与えられた(受け入れられた)解決策は機能しません。これは、デフォルトがオブジェクトのプライベート値として返され、読み取ることができないためです。

名前でルートの _defaults 値を読み取り、その値を使用して転送できることがあれば、知っておくとよいでしょう。

4

2 に答える 2

1

コントローラー内で次を使用します。

$defaults = $this->get('router')->getRouteCollection()->get('home')->getDefaults();

「ホーム」ルートのデフォルトを取得します。

プロパティでデフォルトにアクセスせず、代わり_defaults に getter を使用してください。Route::getDefaults()

Symfony2 APIを参照してください: Symfony\Component\Routing\Route::getDefaults()

ただし、「デフォルト値」という名前が示すように、デフォルトで選択されるため、そのルートを使用するときにそれらを指定する必要はありません。homeしたがって、ルートに転送する場合は、次を使用するだけです。

$this->forward('MyBundle:MyIndex:mypage');

編集

::getRouteCollection()これはキャッシュを使用しないため非常に遅く、呼び出すとディスクの読み取りとルートのコンパイルに多くの時間がかかります。

ここで別のアプローチに答えました(Symfony 2: ルート名でルートのデフォルトを取得する方法は?)。ただし、注意してください: 私の知る限り、公式の Symfony API を使用してこれを効率的に行う方法はまだありません。本当に速くしなければならない場合は、それをハックする必要があります。

于 2013-01-10T15:27:23.993 に答える
0

forwardルートではなく、コントローラー名で使用する必要があります。

例:

特定の値が必要な場合:

$this->forward ('MyBundle:MyIndex:mypage', array('show' =>'activeonly'));

デフォルト値が必要な場合:

$this->forward('MyBundle:MyIndex:mypage');

ルートを使用する場合は、redirect代わりに使用してください。

$this->redirect($this->generateUrl('home'));

ここにいくつかの情報

于 2013-01-10T15:27:36.053 に答える