动作参数路由在Zend框架routes.ini中不起作用

时间:2011-11-02 18:15:19

标签: zend-framework routes zend-route custom-routes

我正在尝试在routes.ini文件中设置Zend Framework(版本1.11.11)中的路由,这将允许匹配以下URL:

my.domain.com/shop/add/123

ShopControlleraddAction。但是,由于某种原因,我的操作无法识别参数(结尾处的数字)。我得到的PHP错误是

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

我知道我可以在引导程序中使用PHP代码进行设置,但我想了解如何在.ini文件中进行此类设置,并且我很难找到解释此问题的任何资源。我还应该指出我在项目中使用模块。我在网上和网上找到的各种代码片段如下所示:

应用/配置/ 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中进行路由的基本信息。

1 个答案:

答案 0 :(得分:2)

显然我在Zend比我想象的更生疏。发布几分钟后,我意识到我试图在控制器中以错误的方式访问参数。它不应该是addAction的参数,而应该通过函数内的请求对象访问它:

在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