2010-07-20 4 views
10

Ich habe ein Formular, für das ich versuche, die Aktion zu setzen. Ich möchte die Aktion in meiner Formdatei (die Zend_Form erweitert) anstatt in einem Controller oder in einer Ansicht deklarieren, indem ich eine Route verwende, die ich in meinem Bootstrap erstellt habe. Normalerweise, wenn ich eine Route verwenden, möchte ich etwas tun, wieZend Form SetAction mit benannten Routen

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

in der Ansicht oder

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

in der Steuerung.

Wie rufe ich eine Route von innerhalb Zend_Form?


edit: Ich habe es aufgegeben, eine Route in Zend_Form zu laden. Vielleicht könnte es in einer zukünftigen Version eine Funktion geben, um dies leicht zu tun? In Form init Funktion:

Ich habe eine viewscript für meine Form und stellen Sie die Route in dem erstellt

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

und in der Ansicht Datei:

<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

Dont geben so schnell. Gib uns einfach die Zeit, deine Frage zu beantworten;) –

Antwort

18

Methode 1: Get der 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); 
    ... 
} 

Methode 2: Ruft eine Instanz des View-Objekts ab und ruft th auf e url-View-Helfer direkt

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

ziehe ich Methode 1. Es ist ausführlicher, aber Sie in Ihrem Formular eine Abhängigkeit weniger haben.

+0

Das Problem mit Methode eins ist, dass ich bereits die Routen im Bootstrap eingerichtet habe. Methode zwei ist fantastisch! –

+0

@Dickie Methode 1 definiert keine neue Route. Es wird eine URL mit einer bestehenden Route zusammengestellt. Werfen Sie einen Blick in Zend_View_Helper_Url. Es macht genau das gleiche: Holen Sie sich den Router und rufen Sie assemble auf. –

+0

Sie haben Recht. Ich habe den Code falsch gelesen.Ich dachte, es würde eine neue Route erstellen, ohne eine Route zu verwenden. Genau danach bin ich. Vielen Dank. –

1

wenn in meinem Controller-Aktion:

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

I View Helfer url verwenden Sie das Formular Aktion URL meiner Meinung nach Skript (xxx.phtml) zu erzeugen:

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

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

echo $this->form; 
0

Ich weiß nicht, wenn es hinzugefügt wurde, aber es gibt eine noch einfachere Lösung.

Sie können das View-Objekt des Formulars mit getView() abrufen, das Zugriff auf die registrierten Routen hat.

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

Heutzutage kann man die Zend_View über getView() Methode auf Zend_Form Klassen-Objekt zugreifen:

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

Könnte diese Hilfe auf ZF 1.8+

Verwandte Themen