2012-03-30 6 views
1

Ich habe ein Problem mit SetAction in der Zend-Form. Ich habe ein mehrseitiges Formular und zu allen subforms habe ich die gleiche AktionZend Formular setAction übergibt falsche URL

$subForm->setAction('process') 
     ->setMethod('post'); 

meine Vordrucke in Index Aktion gemacht werden, Anwendungssteuerung, Käufer Modul http://localhost/project/public/buyer/application, aber wenn ich die Formulare url einreichen wird umgeleitet/to url posted: http://localhost/project/public/buyer/process (auf eine Seite, die doesnot existiert)

scheint es zu funktionieren, wenn ich Setup ein virtueller Server auf meinem Rechner, aber ich kann es nicht arbeiten, wenn sie mit localhost arbeiten oder wenn sie in einem anderen Server im Einsatz .

Ich habe versucht, mit ganz der URL, aber es scheint nicht entweder das heißt $subForm->setAction('buyer/applciation/process') oder $subForm->setAction('application/process')

Antwort

2

Ich habe immer gefunden, es am einfachsten, die Form der action-Attribut aus der Sicht mit der URL Helfer einzustellen. Probieren Sie es wie diese

<?php echo $this->form->setAction($this->url(array(
    'action' => 'process' 
))) ?> 
+0

URL soll Handlung Helfer sein, richtig?Ich kann $ this-> url() nicht verwenden, obwohl ich in der Lage bin, es zu benutzen wie $ this -> _ helfer-> url-> url (array ('action' => 'process')) Es scheint zu funktionieren, aber ich habe eine abstrakte Klasse namens multipage, die zend_form ausdehnt, von der ich beim Erstellen des Unterformulars die Aktion auf alle Formulare setze. Ich werde Änderungen an wenig Code vornehmen müssen (tatsächlich mehrere Stellen im Controller in diesem Szenario, die ich nicht bevorzuge), um es zum Laufen zu bringen. Vielen Dank für den Vorschlag, aber ich werde gerne warten und sehen, ob ich einen besseren Vorschlag bekomme, warum meine eine nicht funktioniert. –

+0

Es gibt sowohl Action- als auch View-Helfer namens "Url". Mein Beispiel stammt vom View-Skript, aber Sie können den Action-Helper in Ihrem Controller verwenden, wenn er Ihrer Konfiguration besser entspricht. – Phil

0

Wenn Sie tun $ subForm-> setAction (‚Prozess‘), ist es im Wesentlichen setzt einen relativen Pfad zu der URL an/Projekt/public/Käufer/Anwendung, was bedeutet, es wird übernehmen Dieses Projekt, öffentlich und Käufer sind Verzeichnisse und Prozess sollte auf der gleichen Ebene wie die Anwendung sein.

Try this:

$this->form->setAction('/application/process'); 

Ich bin nicht wirklich sicher, was die richtige URL ist, aber ich würde versuchen, die URL mit einem führenden mit /, so dass es relativ nicht mehr ist.

+0

Das Codieren von URL-Strings in einer MVC-App ist im Allgemeinen eine schlechte Idee. Es ist besser, Routennamen oder Helfer (URL-Generatoren) zu verwenden. – Phil

+0

Absolut einverstanden @Phil. An dieser Stelle können wir nur Annahmen über das Setup machen und darüber, ob es sich um einen Dokumentstamm handelt oder ob ein Modul involviert ist. Ohne die gewünschte URL zu kennen, die er will, ist es ohnehin schon ein Rätsel. –

0

tun

$subForm->setAction($this->getView()->url(array('action'=>'process','controller'=>'application','module'=>'buyer'),null,true)) 
     ->setMethod('post'); 
+2

es ist das gleiche wie was phil hatte nur vorgeschlagen, dass Sie Ansicht Helfer in Controller verwenden –

0

es mir sieht aus wie das Problem ist, dass process nicht eine Aktion in einem Controller ist. Es sieht mehr wie eine Methode oder Klasse aus, die aufgerufen wird. Was Sie am häufigsten in ZF sehen werden, ist, Ihre Formularaktion auf eine Aktion zu setzen.

//set form action to a controller action where you can call process against the form. 
$form->setAction('action')//or 'controller/action' or 'module/controller/action' 

die ZF Referenz hat eine ziemlich umfangreiche Diskussion darüber, wie multi part forms

+0

Ich denke, Sie haben die Frage nicht vollständig gelesen und ja Prozess ist der Name meiner Aktion –

+0

@Rohan Sorry, ich missverstanden. – RockyFord

1

Ich fand heraus, zu tun, was mit meinem Code falsch war, Es scheint, dass zend meine url wurde die Behandlung von: - http://localhost/project/public/buyer/application als Käufer Controller und Anwendungsaktion, dh da die Aktion Index ist und nicht in meiner URL enthalten ist. Was mein Stück Code $form->setAction('process'); tun würde, wäre es einfach die "Anwendung" mit "Prozess" http://localhost/project/public/buyer/process ersetzen würde unter der Annahme, dass diese Anwendung die Aktion war. Wenn ich nicht falsch liege, könnte das ein Fehler sein oder so scheint es.

Ich habe meinen Aktionsindex als Formular umbenannt und jetzt scheint es zu funktionieren. Obwohl ich mochte, wie @Phil vorgeschlagen hatte. Aber nur in der Fall jemand anders woul