2009-11-05 6 views
13

Dans l'aide de vue Zend, il est l'URL de la fonction() pour fournir une URL basée sur les tables de routage, par exempleéquivalent de la fonction d'aide url() dans le contrôleur Zend

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

Comment puis-je faire la même chose dans un contrôleur? En particulier, je veux définir l'URL d'action pour un formulaire Zend en utilisant la syntaxe de commande/action plutôt qu'une URL standard par exemple

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

Répondre

23

Il existe un assistant d'action pour cela: Zend_Controller_Action_Helper_Url. A l'intérieur d'un contrôleur d'action, vous pouvez y accéder à l'aide:

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

ou:

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

Vous pouvez également utiliser l'aide de vue:

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

Si j'appelle '$ this -> _ helper-> url (array ('controller' => 'index', 'action' => 'download'))' en dehors de l'IndexController (ici AjaxController) il retourne * '/ ajax/Array '* qu'est-ce que j'ai mal fait? Ou est-ce un bug? – lony

+2

Utilisez '$ this -> _ helper-> url ('download', 'index')' ou '$ this -> _ helper-> url-> url (array ('controller' => 'index', 'action' = > 'télécharger')) '. Je vais mettre à jour ma réponse et ajouter un lien vers les documents de l'API. –

2

a été en mesure de répondre à ma propre question car il semble que le code suivant fait le tour: -

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

J'utilise maintenant '$ this-> view-> url (array ('contrôleur' ​​=> 'index', 'action' => 'download'))', non sympa mais fonctionne à l'intérieur du contrôleur. – lony

3

Je l'ai fait découvert que seulement cela fonctionne:

// 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 vous pouvez utiliser:

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