3

ZF2でのポストデータのルーティング

/connection/addルートのすべての投稿データがこのyaml構成を使用して別のメソッドにルーティングされる、zf2でルーティングを設定しようとしました。

router:
  routes:
    home:
      type: literal
      options:
        route: '/'
        defaults:
          controller: Admin\Dashboard
          action:     index

    connection:
      type: literal
      options:
        route: '/connection'
        defaults:
          controller: Admin\Connection
          action:     list

      may_terminate: true
      child_routes:
        add:
          type: literal
          options:
            route: '/add'
            defaults:
              action: add

          may_terminate: true
          child_routes:
            post:
              type: method
              options:
                verb: post
                defaults:
                  action: test

Zend \ Mvc \ Router \ Http \ Methodpostのタイプを使用している最も深い子を除いて、上記の例のすべてが正常に機能します

期待される出力:

投稿データをルートに送信する/connection/addと、その人はアクションにルーティングされtestます。

実際の出力:

上記のルーティングの最後の子は無視さaddれ、フォームから送信された投稿データをディスパッチするときにアクションが呼び出されます。

質問:

  • 私は何が欠けていますか?
  • 私のアプリケーションでこの種のルーティングを行う方法はありますか?
  • もしそうなら、構成はどのように見えるでしょうか?
4

2 に答える 2

6

実際には可能ですが、もう少し明示的な構成が必要です。

例が機能しなかった理由は、ルーターが「追加」ルートに正常に一致し、先を見ずにそこに戻ったためです。'may_terminate'をfalseに設定し、child_routesで処理するすべてのメソッドを明示的に定義することにより、そこで終了できないことを伝える必要があります。

    add:
        type: Literal
        options:
            route: '/add'
            defaults:
                action: add
        may_terminate: false
        child_routes:
            post:
                type: method
                options:
                    verb: post
                    defaults:
                        action: test
            everythingelse:
                type: method
                options:
                    verb: 'get,head,put,delete'
                    defaults:
                        action: add

重要なのは、「may_terminate」をfalseに設定して、ルーターが一致を早く返さないようにすることです。

于 2013-04-04T18:11:31.863 に答える
0

これは、追加ルートの子として持っているためか、子としてではなく同じレベルで追加してみてください。

 child_routes:
    add:
      type: literal
      options:
        route: '/add'
        defaults:
          action: add
      may_terminate: true
    post:
      type: method
      options:
        verb: post
        defaults:
          action: test
      may_terminate: true

'add'ルートの子ではなく、兄弟になるようにします。

于 2013-01-29T08:51:34.313 に答える