2010-07-20 12 views
10

Ho un modulo per il quale sto cercando di impostare l'azione. Voglio dichiarare l'azione all'interno del mio file di modulo (che estende Zend_Form) invece che in un controller o in una vista, utilizzando una route che ho creato nel mio bootstrap. Di solito quando voglio usare un percorso che faccio qualcosa di simileZend Form SetAction Using Named Routes

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

nella vista, o

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

nel controller.

Come si chiama una rotta da Zend_Form?


edit: ho rinunciato al tentativo di caricare un percorso in Zend_Form. Forse in una versione futura potrebbe esserci una funzione per farlo facilmente?

ho creato un ViewScript per la mia forma e impostare il percorso in quanto: Nella funzione modulo di init:

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

e nel file di visualizzazione:

<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

Non rinunciare così in fretta. Dacci solo il tempo di rispondere alla tua domanda;) –

risposta

18

Metodo 1: Get il router

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

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

Metodo 2: Ottenere un'istanza dell'oggetto View e chiamare ° e url-view-helper direttamente

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

preferisco il metodo 1. E 'più prolisso ma avete una dipendenza meno nel modulo.

+0

Il problema con il metodo uno è che ho già impostato i percorsi nel bootstrap. Il secondo metodo è fantastico! –

+0

@Dickie Il metodo 1 non definisce una nuova rotta. Assembla un URL con una rotta esistente. Dai un'occhiata a Zend_View_Helper_Url. Fa esattamente la stessa cosa: prendi il router e chiama assembla. –

+0

Hai ragione. Ho letto male il codice.Pensavo che stesse creando una nuova rotta, non usando una rotta. Questo è esattamente ciò che sto cercando. Grazie. –

1

se nella mia azione di controllo:

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

userò view helper URL per generare l'URL form action a mio avviso scritto (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

non lo so quando è stato aggiunto, ma c'è una soluzione ancora più semplice.

È possibile recuperare l'oggetto di visualizzazione del modulo con getView(), che ha accesso ai percorsi registrati.

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

Al giorno d'oggi è possibile accedere all'oggetto Zend_View via getView() metodo su Zend_Form classi:

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

Potrebbe questo aiuto su ZF 1.8+