2010-07-20 3 views
10

J'ai un formulaire pour lequel j'essaie de définir l'action. Je veux déclarer l'action dans mon fichier de formulaire (qui étend Zend_Form) au lieu de dans un contrôleur ou une vue, en utilisant une route que j'ai créée dans mon bootstrap. Habituellement, lorsque je veux utiliser une route que je fais quelque chose commeZend Form SetAction Utilisation de routes nommées

$this->url(array(), 'route-name'); 

dans la vue, ou

$this->_helper->url(array(), 'route-name'); 

dans le contrôleur.

Comment appeler une route depuis Zend_Form?


modifier: J'ai renoncé à essayer de charger un itinéraire dans Zend_Form. Peut-être dans une prochaine version, il peut y avoir une fonction pour le faire facilement?

J'ai créé un viewScript pour mon formulaire et définissez la route en ce que: Dans la fonction init forme:

$this->setDecorators(array(
    'PrepareElements', 
     array(
      'ViewScript', array(
        'viewScript' => 'forms/formView.phtml' 
      )))); 

et dans le fichier de vue:

<form method="post" action="<?php echo $this->url(array(), 'route-name'); ?>" enctype="application/x-www-form-urlencoded"> 
    <?php 
     foreach ($this->element->getElements() as $element) 
     { 
      echo $element; 
     } 
    ?> 
</form> 
+0

Ne pas abandonner si vite. Donnez-nous juste le temps de répondre à votre question;) –

Répondre

18

Méthode 1: Obtenir le routeur

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

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

Méthode 2: Obtenir une instance de l'objet View et appeler e url-view-aide directement

// in your form  
public function init() 
{ 
    $url = Zend_Layout::getMvcInstance()->getView()->url(array(), 'routeName'; 
    $this->setAction($url); 
    ... 
} 

je préfère la méthode 1. Il est plus bavard, mais vous avez une dépendance moins dans votre formulaire.

+0

Le problème avec la première méthode est que j'ai déjà les routes configurées dans le bootstrap. La deuxième méthode est fantastique! –

+0

@Dickie La méthode 1 ne définit pas de nouvelle route. Il assemble un Url avec une Route existante. Jetez un oeil à Zend_View_Helper_Url. Il fait exactement la même chose: Obtenir le routeur et appeler assembler. –

+0

Vous avez raison. J'ai mal lu le code.Je pensais que cela créait une nouvelle route, n'utilisant pas de route. C'est exactement ce que je suis après. Merci. –

1

si mon action de contrôleur:

$this->view->form = $form; 

je vais utiliser url aide de vue pour générer l'URL d'action de forme dans mon script de vue (de xxx.phtml):

$url = $this->url(array('controller'=>'my-controller-name', 
        'action'=>'my-action-name'), 
       'my-route-name' 
      ); 

$this->form->setAction($url); 

echo $this->form; 
0

Je ne sais pas quand il a été ajouté, mais il existe une solution encore plus simple.

Vous pouvez récupérer l'objet de vue du formulaire avec getView(), qui a accès aux routes enregistrées.

//In the form 
$this->setAction($this->getView()->url(array('param1' => 'value1'), 'routeName')); 
1

Aujourd'hui, vous pouvez accéder à l'objet Zend_View via la méthode getView() sur Zend_Form cours:

// init your form  
public function init() 
{ 
    $view = $this->getView(); 
    $url = $view->url(array('module'=>'login','action'=>'login')); 
    $this->setAction($url); 
    ... 
} 

cette aide aurait-ZF 1.8+