簡體   English   中英

在Zend Framework 2中進行路由,跳過URL中的“索引”操作,但獲取ID

[英]Routing in Zend Framework 2, skip 'index' action in url but get id

我有一個控制器,可以使用index動作和其他一些動作(例如testAction()作為modulename/xmlcoverage調用。 該控制器的url是xml/coverage

然后,默認方式是xml/coverage映射到我的index操作。 並且該xml/coverage/test映射到testAction。 如果我需要一個id作為testAction,則該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。

我在做什么錯,我如何才能使網址正常工作? 謝謝。

編輯:這是一個問題。 我認為這樣做:

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

實際上以xml/coverage/1的形式給出了一個URL,它將崩潰! 將路由更改為/xml/coverage[/:action[/:id]]至少將使url幫助程序生成有效的url。

在與IRC上的ZF2優秀人員進行交談和調試之后,我們找到了路由中的錯誤。

在討論中我做了一個小例子,我的問題,這是在這里 如您從此處的var dump所看到的 ,在第二種情況下,該操作會丟失,該操作應默認為“ index”。

但是,如果有人需要立即使用此功能,可以通過以下方法對其進行修復:

  1. 代替將路由設為/test[/:action][/:id]使其變為/test[/:action[/:id]] ,然后url幫助程序將添加/ index /,至少它可以工作。
  2. 新建一條路由,在此路由中,除了另一條路由外,您還只收聽/test[/:id]
  3. 在您的控制器中,執行public function notFoundAction() { $view = new ViewModel($this->indexAction()); //etc} public function notFoundAction() { $view = new ViewModel($this->indexAction()); //etc} Kinda hacky,但是有了這個錯誤,它將調度一個未找到的動作,您可以搭載它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM