Handling Eingang mit dem Zend Framework (Post,get,etc.)
im Refactoring von php unter zend-code und der gesamte code ist voll von $_GET["this"]
und $_POST["that"]
. Ich habe immer mehr phpish $this->_request->getPost('this')
und $this->_request->getQuery('that')
(diese wird nicht so viel logischer mit der getquery insteado der getGet).
Also ich Frage mich, ob meine Methode war sicherer/besser/einfacher zu mantain. Ich lese in der Zend Framework Dokumentation, müssen Sie überprüfen Ihren eigenen Eingang, da das request-Objekt es nicht tun.
Lässt mich mit 2 Fragen:
- Was am besten ist dieser zwei? (oder wenn es einem anderen besser Weg)
- Was ist die beste Methode für die Validierung von php-Eingabe mit dieser Methode?
Dank!
InformationsquelleAutor der Frage DFectuoso | 2009-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Normalerweise verwende ich $this->_request->getParams(); abrufen, entweder die post oder die URL-Parameter. Dann nutze ich das Zend_Filter_Input zu tun, Validierung und Filterung. Die getParams() nicht tut Validierung.
Mithilfe der Zend_Filter_Input, die Sie tun können application-level-Validierung, mithilfe des Zend Validatoren (oder schreiben Sie Ihre eigenen auch). Zum Beispiel, können Sie sicherstellen, dass die 'Monate' - Feld ist eine Zahl:
InformationsquelleAutor der Antwort Brian Fisher
Erweitern Brians Antwort.
Als Sie notiert haben, können Sie auch check out
$this->_request->getPost()
und$this->_request->getQuery()
. Wenn Sie verallgemeinern aufgetParams()
es ist irgendwie wie mit der$_REQUEST
superglobale und ich glaube nicht, dass das akzeptabel ist in Bezug auf die Sicherheit.Zusätzlich zu Zend_Filter, können Sie auch einfach PHP zu werfen erforderlich.
E. g.:
Für andere Werte, es wird viel komplizierter, so stellen Sie sicher, dass z.B. Angebot von DB-Abfragen (Zend_Dbfinden Sie die Quotierung von Bezeichnern,
$db->quoteIdentifier()
) und in Ansichten verwenden$this->escape($var);
zu entkommen Inhalte.InformationsquelleAutor der Antwort Till
Können Sie nicht schreiben Sie eine one-size-fits-all-Validierung Funktion für get/post-Daten. In einigen Fällen benötigen Sie ein Feld, um eine ganze Zahl, und in der anderen ein Datum zum Beispiel. Das ist, warum gibt es keine überprüfung der Eingabe in das zend framework.
Haben Sie zu schreiben der Validierungs-code an der Stelle, wo Sie es brauchen. Sie können natürlich schreiben einige helper-Methoden, aber Sie können nicht erwarten, dass der getPost() zu überprüfen, etwas für Sie ganz von selbst...
Und es ist auch gar nicht getPost/getQuery Platz zu validieren alles, es ist die Aufgabe bekommen Sie die Daten, die Sie wan ' T, was passiert, um es von dort aus sollte es nicht sein Anliegen.
InformationsquelleAutor der Antwort Jan Hančič
InformationsquelleAutor der Antwort rafaelphp
Nur eine kurze Erklärung über die Wahl des
getQuery()
. Die Wortwahl kommt von dem, was Art der Daten, die es ist, nicht wie es dorthin kam. GET und POST sind nur request-Methoden, die alle Arten von Informationen, einschließlich, im Falle einer POST-Anfrage, ein Abschnitt bekannt als "post-Daten". Eine GET-Anfrage hat keinen solchen block, alle Variablen, die Daten, die er trägt, ist Teil der query-string der url (der Teil nach dem ?).So, während
getPost()
ruft die Daten aus der post-data-Bereich eine POST-AnfragegetQuery()
ruft Daten aus dem query-string der entweder eine GET-oder POST-request (wie auch andere HTTP-Request-Methoden).(Beachten Sie, dass GET-Anfragen sollten nicht verwendet werden, für alles, was, die produzieren könnte eine Nebenwirkung, wie ändern Sie eine DB-Zeile)
So, in Antwort auf Ihre erste Frage, verwenden Sie die
getPost()
undgetQuery()
Methoden, auf diese Weise, können Sie sicher sein, wo die Daten-Quelle (wenn man nicht aufpasst,getParams()
auch funktioniert, Sie kann aber auch zusätzliche Daten).Der beste Ort, um Eingaben überprüft, die ist, wo Sie ersten verwenden. Das heißt, wenn Sie ziehen Sie es aus
getParams()
getPost()
odergetQuery()
. Auf diese Weise sind Ihre Daten immer korrekt für, wo Sie es brauchen, und wenn Sie es ausgeben, wissen Sie, es ist sicher. Denken Sie daran, wenn Sie übergeben es an einem anderen Controller (oder Controller-Action) sind, sollten Sie vielleicht überprüfen Sie wieder da, nur um sicher zu sein. Wie Sie dies tun, hängt von Ihrer Anwendung, aber es muss noch überprüft werden.InformationsquelleAutor der Antwort Kenzal Hunter
nicht direkt zum Thema, aber
um sicherzustellen, dass Sie erhalten eine Zahl in der Eingabe, könnte man auch verwenden, $var+0
(allerdings, wenn $var ist ein Schwimmer bleibt ein Schwimmer)
Sie können in den meisten Fällen
$id = $this->_request->getQuery('id')+0;
InformationsquelleAutor der Antwort