2009-11-05 11 views
13

En el ayudante de vista Zend, existe la función url() para dar salida a una dirección URL basada en las tablas de enrutamiento, por ejemploEquivalente de url función auxiliar() en el controlador de Zend

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

¿Cómo puedo hacer la misma cosa en un controlador? En particular, quiero establecer la URL de acción para un Formulario de Zend utilizando la sintaxis de controlador/acción más que un ejemplo URL estándar

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

Respuesta

23

Hay una acción auxiliar para esto: Zend_Controller_Action_Helper_Url. Dentro de un controlador de acción, se puede acceder a él usando:

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

o:

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

Alternativamente, también puede utilizar el ayudante de vista:

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

Si llamo '$ this -> _ helper-> url (array ('controller' => 'index', 'action' => 'download'))' fuera del IndexController (aquí AjaxController), devuelve * '/ ajax/Matriz '* ¿qué hice mal? O se trata de un error? – lony

+2

Use '$ this -> _ helper-> url ('download', 'index')' o '$ this -> _ helper-> url-> url (array ('controller' => 'index', 'action' = > 'descargar')) '. Actualizaré mi respuesta y agregaré un enlace a los documentos de API. –

2

fue capaz de responder a mi propia pregunta, ya que parece el siguiente código hace el truco: -

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

ahora el uso de '$ this-> Ver-> url (array ('controller' => 'índice', 'action' => 'descarga'))', no agradable, pero funciona dentro del controlador. – lony

3

De hecho, he encontrado a cabo que solo esto funciona:

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

En ZF3 puede utilizar:

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