2009-11-05 2 views
13

По мнению помощника Зенд, есть функция URL() для вывода URL на основе таблиц маршрутизации, напримерЭквивалент URL) вспомогательной функции (в Zend контроллер

$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'))); 

ответ

23

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

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

или:

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

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

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

Если я вызываю '$ this -> _ helper-> url (array ('controller' => 'index', 'action' => 'download'))' за пределами IndexController (здесь AjaxController) он возвращает * '/ ajax/Array '*, что я сделал не так? Или это ошибка? – lony

+2

Используйте '$ this -> _ helper-> url ('download', 'index')' или '$ this -> _ helper-> url-> url (array ('controller' => 'index', 'action' = > 'download')) '. Я обновлю свой ответ и добавлю ссылку на документы API. –

2

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

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

теперь я использую '$ this-> view-> URL (массив ('контроллер' => 'индекс', 'действие' => 'скачать'))', а не приятно, но работает внутри контроллера. – lony

3

Я на самом деле узнал что только это работает:

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

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

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

$form = new YourFormClass(); 
    $form->setMethod('post')->setAction($this->url()->fromRoute(array('controller' => 'index', 'action' => 'add')); 
Смежные вопросы