Эквивалент вспомогательной функции url() в контроллере Zend

В помощнике вида Zend существует функция url() для вывода URL-адреса на основе таблиц маршрутизации, например

$this->url(array('controller' => 'comments', 'action' => 'add')

Как я могу сделать то же самое в контроллере? В частности, я хочу установить URL-адрес действия для формы Zend, используя синтаксис контроллера/действия, а не стандартный URL, например

$form = new Zend_Form;
$form->setMethod('post')->setAction( $this->url(array('controller' => 'comments', 'action' => 'add')) );

Ответы

Ответ 1

Для этого есть помощник действий: Zend_Controller_Action_Helper_Url. Внутри контроллера действий вы можете получить к нему доступ, используя:

$this->_helper->url($action [, $controller [, $module [, $params]]]);

или

$this->_helper->url->url(array(...));

В качестве альтернативы вы также можете использовать помощник вида:

$this->view->url(...);

Ответ 2

Я действительно узнал, что только это работает:

// in your form
public function init()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $url = $router->assemble(
        array(
            'paramterName0' => 'parameterValue0',
            'paramterName1' => 'parameterValue1',
        ),
        'routeName'
    );

    $this->setAction($url);
    ...
}

Ответ 3

Был способен ответить на мой собственный вопрос, поскольку, кажется, следующий код делает трюк: -

$form = new Zend_Form;
$form->setMethod('post')->setAction( $this->getHelper('url')->url(array('controller' => 'index', 'action' => 'add')) );

Ответ 4

В zf3 вы можете использовать:

    $form = new YourFormClass();
    $form->setMethod('post')->setAction($this->url()->fromRoute(array('controller' => 'index', 'action' => 'add'));