Маршрутизация параметров действий не работает в Zend Framework. - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь настроить маршрут в Zend Framework (версия 1.11.11) в файле rout.ini, что позволило бы соответствовать следующему URL:

my.domain.com/shop/add/123

до ShopController и addAction. Однако по какой-то причине мой параметр не распознает параметр (число в конце). Я получаю ошибку PHP

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

Я знаю, что мог бы установить это, используя PHP-код в начальной загрузке, но я хочу понять, как выполнить этот тип настройки в INI-файле, и мне трудно найти какие-либо ресурсы, объясняющие это. Я также должен отметить, что я использую модули в своем проекте. То, что я придумал, используя различные фрагменты, найденные здесь и там онлайн, таково:

приложение / 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;
    }

}

Любые предложения относительно того, почему это не работает? У меня такое чувство, что я упускаю что-то фундаментальное в маршрутизации в Zend через файлы .ini.

1 Ответ

2 голосов
/ 02 ноября 2011

Похоже, я в Рендже ржавее, чем думал. Через несколько минут после публикации я понял, что пытаюсь получить неверный доступ к параметру в моем контроллере. Это не должен быть параметр addAction, вместо этого я должен получить к нему доступ через объект запроса внутри функции:

правильное добавление в ShopController:

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
...