Ein typisches Problem bei der Anmeldung mit Zend_Form

8

Iam konfrontiert ein typisches Problem mit einer Formularübergabe mit Zend-Framework. Im Grunde habe ich einen einfachen Code geschrieben, um einen Benutzer anzumelden, aber das kam aus heiterem Himmel.

Der Code zum Anzeigen des Formulars ist ziemlich Standard

$ loginform = neu Application_Form_Login ();         $ loginform- & gt; setMethod ('post');         $ loginform- & gt; setAction ('Login');         $ this- & gt; view- & gt; form = $ loginform;

Wenn ich meine Homepage-URL als Ссылка

verwende

Ich bekomme eine Ausnahme

%Vor%

Wenn ich jedoch die Basis-URL als Ссылка verwende, funktioniert der gleiche Code einwandfrei.

Ich weiß auch, dass es aufgrund der Tatsache, dass in der ersten url der Zend Router den Index-Controller mit Login versaut, da es nicht in der Lage ist, die Login-Aktion an die Standard-Index-Controller anhängen.

Glaubst du, das ist das Design von Zend Framework und ich werde meine Benutzer zwanghaft zu dieser URL schicken Ссылка , wenn sie auf die Startseite gelangen oder gibt es eine Möglichkeit, mit der mein Code arbeiten kann Ссылка

Irgendwelche Vorschläge?

    
Sumit Ghosh 14.12.2010, 00:04
quelle

3 Antworten

2

Kurze Antwort:

%Vor%

Lächerlich ausführliche Antwort folgt:; -)

Ein Punkt der Verwirrung ist die Verwendung des Begriffs "Aktion".

In Bezug auf ein Formular bezieht sich "action" auf das Aktionsattribut:

%Vor%

Auf diese Aktion wird beim Aufruf von $form->setAction() method verwiesen. Der entscheidende Punkt ist, dass dies eine URL sein muss, und die Anwendung muss über Routing verfügen, das diese URL einem (Controller-, Aktions-) Paar zuordnet.

Was die andere Art, in der der Begriff "Aktion" verwendet wird, aufzeigt: als Kurzname für eine Methode auf einem Controller. Beispielsweise wird die Aktion mit dem Namen "smile" der Methode smileAction() auf dem Controller zugeordnet.

In Ihrem Fall besteht das Problem darin, den setAction() -Aufruf Ihres Formulars mit dem für die App geltenden Routing synchron zu machen.

Indem Sie die URL "login" als Aktion des Formulars angeben, geben Sie eine relative URL an, sodass der Browser diese als relativ zur URL interpretiert, die in der Adressleiste des Browsers angezeigt wird. Wenn Sie zu der Seite navigieren, aber den "Index" -Abschnitt der URL nicht verwenden, sieht das Standard-Routing im Framework "login" als Controller an. Da Sie keine LoginController haben, wird die Anfrage verworfen.

So könnte Ihr IndexController wie folgt aussehen:

%Vor%

Das Ergebnis ist, dass der Aufruf von setAction () eine URL benötigt, die der Router einem Controller / Aktionspaar zuordnen kann, um den Post zu verarbeiten.

Hoffe, das hilft!

    
David Weinraub 14.12.2010, 06:55
quelle
2

Sie müssen die URL Ihrer Aktion wie folgt festlegen:

Wenn Sie in der Ansicht sind

%Vor%

Wenn Sie auf dem Controller sind

%Vor%

oder

%Vor%

Siehe diese verwandte Frage:

Zend Form SetAction mit benannten Routen

    
Keyne Viana 14.12.2010 11:52
quelle
-1

Zunächst sollten Sie wissen, dass der Ordner "public" in Ihrem Beispiel der Webstamm (oder DocumentRoot) sein sollte. Sobald Sie es richtig eingerichtet haben, werden Sie sehen, dass Sie mit Ссылка auf Ihre Site zugreifen können, und ich bin mir ziemlich sicher, dass Ihr Login-Formular wird ohne Probleme funktionieren.

Weitere Informationen finden Sie unter Ссылка .

    
wimvds 14.12.2010 08:28
quelle

Tags und Links