2

modulename/xmlcoverageアクションや他のいくつかのindexアクションと同じように呼び出すことができるコントローラーがありますtestAction()。このコントローラーへのURLはxml/coverageです。

デフォルトの方法はxml/coverage、インデックスアクションにマップすることです。そして、それxml/coverage/testはtestActionにマップされます。testActionのIDが必要な場合、URLはたとえば次のようxml/coverage/test/33になります。

ただし、インデックスアクションの場合は、希望するxml/coverage/index/33 場所にある必要がありますxml/coverage/33

これが私のルートです

'xmlcoverage' => array(
        'type'    => 'segment',
        'options' => array(
                'route' => '/xml/coverage[/:action][/:id]',
                'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                ),
                'defaults' => array(
                        'controller' => 'modulename/xmlcoverage',
                        'action'     => 'index',
                ),
        ),
),

url xml / coverage / 33を試すとき、33はidにマップする必要があると思います。これは、アクションの正規表現と一致せず、両方ともオプションであるためです。また、アクションと一致しないため、デフォルト(インデックス)を使用する必要があります。

代わりに、URLをルーティングで一致させることができないというエラーが表示されます。したがって、私にとっては、'/xml/coverage[/:action[/:id]]'何らかの理由でIDを認識するためのアクションを指定する必要があるため、ルートがルートであるかのように動作します。

何が間違っているのでしょうか。URLを希望どおりに機能させるにはどうすればよいですか。ありがとう。

編集:ここに問題があります。 私の見解ではこれを行う:

$this->url('xmlcoverage', array('action' => 'index', 'id' => $someid))

実際にxml/coverage/1クラッシュするURLをフォームに表示します!ルートをに変更する/xml/coverage[/:action[/:id]]と、少なくともURLヘルパーが機能するURLを生成します。

4

1 に答える 1

5

IRC で ZF2 の親切な人々と話し合い、デバッグした後、ルーティングのバグを突き止めました。

議論の中で、私はここにある私の問題の小さな例を作りました. ここの var ダンプからわかるように、2 番目のケースではアクションが失われ、デフォルトで「index」になります。

しかし、誰かが今すぐこの機能を動作させる必要がある場合は、次の方法で修正できます。

  1. ルートを にする代わりに/test[/:action][/:id]/test[/:action[/:id]]url ヘルパーは /index/ を追加し、少なくとも機能します。
  2. 他のルートに加えて、聞くだけの新しいルートを作成します/test[/:id]
  3. コントローラーでちょっとpublic function notFoundAction() { $view = new ViewModel($this->indexAction()); //etc}ハックしてください。ただし、このバグを使用すると、見つからないアクションがディスパッチされます。これをピギーバックできます。
于 2012-07-19T06:44:11.657 に答える