0

Zend Framework (バージョン 1.11.11) の routes.ini ファイルでルートを設定しようとしています。これにより、次の URL に一致させることができます。

my.domain.com/shop/add/123

ShopControlleraddAction。しかし、何らかの理由で、パラメーター (末尾の数字) が私のアクションで認識されていません。私が得ているPHPエラーは

Warning: Missing argument 1 for ShopController::addAction(), called in...

ブートストラップで PHP コードを使用してこれをセットアップできることは知っていますが、.ini ファイルでこのタイプのセットアップを行う方法を理解したいのですが、これを説明するリソースを見つけるのに苦労しています。また、プロジェクトでモジュールを使用していることも指摘しておく必要があります。オンラインであちこちにあるさまざまなスニペットを使用して私が思いついたのは次のとおりです。

application/config/routes.ini:

[routes]
routes.shop.route = "shop/add/:productid/*"
routes.shop.defaults.controller = shop
routes.shop.defaults.action = add
routes.shop.defaults.productid = 0
routes.shop.reqs.productid = \d+

Bootstrap.php:

... 
protected function _initRoutes() 
    {
        $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes');
        $router = Zend_Controller_Front::getInstance()->getRouter();
        $router->addConfig( $config, 'routes' );
    }
...

ShopController.php

<?php

class ShopController extends Egil_Controllers_BaseController
{

    public function indexAction()
    {
        // action body
    }

    public function addAction($id)
    {
        echo "the id: ".$id;
    }

}

これが機能しない理由について何か提案はありますか? .ini ファイルを介した Zend でのルーティングについて、何か基本的なことが欠けているように感じます。

4

1 に答える 1

2

どうやら私は思ったよりも Zend に慣れていないようです。投稿してから数分後、コントローラーで間違った方法でパラメーターにアクセスしようとしていることに気付きました。これは addAction のパラメーターであってはなりません。代わりに、関数内の request オブジェクトを介してアクセスする必要があります。

ShopController の正しい addAction:

public function addAction()
{
    $id = $this->_request->getParam('productid');
    echo "the id: ".$id;
}

また、この場合、ルート設定をかなり簡素化できることにも気付きました。

[routes]
routes.shop.route = "shop/:action/:productid"
routes.shop.defaults.controller = shop
routes.shop.defaults.action = index
于 2011-11-02T18:30:11.643 に答える