0

ZFアプリケーション用に2つの同様のルートを設定していますが、そのうちの1つは機能し、もう1つは機能しません。これは、ユーザーが表示できるようにデータベースのアイテムを表示し、完全に機能します。

ブートストラップでルーティングします。

//Static item profile
    $route = new Zend_Controller_Router_Route('item/:item_id',
                                                array('controller'=> 'item',
                                                'action'=> 'index'));
    $router->addRoute('item', $route);

そして、アイテムコントローラーのインデックスアクションでアイテムIDを取得する場所:

$id = $this->getRequest()->getParam('item_id');

管理者がアイテムデータを編集できるように、これをバックエンドに設定しています。

//Management back end
    $route = new Zend_Controller_Router_Route('manage/edititem/:item_id',
                                                array('controller'=> 'manage',
                                                'action'=> 'edititem'));
    $router->addRoute('manage', $route);

そして、これは、マネジャーコントローラーのedititemアクションでIDを取得する場所です。

$item_id = $this->getRequest()->getParam('item_id');

何らかの理由で、/ manage / edititem /:item_idに移動すると、これのitem_idは常にnullになりますが、/ manage / edititem / item_id /:item_idに移動すると完全に正常に機能します。カスタムルートを使用しようとすると、ルートが機能しないのはなぜですか?edititemアクション内のコードをまだ実行しているため、以前のルートに捕らえられず、その上のセミコロンが欠落しておらず、コピーして貼り付けたので、タイプミスではないかと思います。私のルートの何が問題になっている可能性がありますか?

4

2 に答える 2

0

ハイメ、

あなたのコードは正しく見えます...私はローカルインスタンスでそれをテストしました、そしてリルートは正しく機能しました

$route = new Zend_Controller_Router_Route('manage/edititem/:item_id',array('controller'=> 'manage','action'=> 'edititem'));

これは私に問題が他の場所にあると思うように導きます。私が最初に試みることは、ブートストラップ内の他のすべてのルートを無効にして、そこに実際に競合がないかどうかを確認することです。

もう1つの試みは、item_idとは異なるフィールド名を使用することです。コントローラに渡す必要のある同じフィールド名のルートが複数ある場合、ルータマネージャが混乱している可能性があります。

于 2012-07-14T19:08:13.510 に答える
0

この質問を投稿してから、いくつかのルートを書き直しましたが、問題はここで設定した名前だったと思います。

$router->addRoute('manage', $route);

当時は制限に気づいていませんでしたが、zendルーターではそれぞれの名前が一意である必要があり、当時はmanageという名前のルートが2つあったと思います。私のルートのほとんどはまだ同じですが、今ではよりわかりやすい名前が付けられており、この問題は発生していません。

于 2012-08-12T13:40:54.093 に答える