Frage

im Refactoring php auf zend-Code und den gesamten Code ist voll von $_GET["this"] und $_POST["that"]. Ich habe früher immer das mehr phpish $this->_request->getPost('this') und $this->_request->getQuery('that') (dies mit dem getQuery insteado von getGet nicht so sehr logisch zu sein).

Also ich frage mich, ob meine Methode sicherer war / besser / leichter mantain. Ich las in der Zend Framework-Dokumentation, die Sie Ihren eigenen Eingang, da das Request-Objekt wird es nicht tun validieren müssen.

Das läßt mich mit zwei Fragen:

  • Was ist das Beste dieser beiden ist? (Oder wenn Theres eine andere Art und Weise besser)
  • Was ist die beste Praxis PHP-Eingangs mit diesen Methoden für die Validierung?

Danke!

War es hilfreich?

Lösung

ich in der Regel verwenden $ this -> _ request-> getParams (); entweder an den Pfosten oder die URL-Parameter abzurufen. Dann benutze ich die Zend_Filter_Input Validierung und Filterung zu tun. Die getParams () nicht Validierung tun.

die Zend_Filter_Input können Sie in der Anwendungsebene Validierung tun, die Zend Validatoren (oder Sie können Ihre eigenen schreiben). Zum Beispiel können Sie sicherstellen, dass die ‚Monate‘ Feld eine Zahl ist:

$data = $this->_request->getParams();

$validators = array(
    'month'   => 'Digits',
);

$input = new Zend_Filter_Input($filters, $validators, $data);

Andere Tipps

Erweitern von Brians Antwort.

Wie Sie bemerken können Sie auch überprüfen $this->_request->getPost() und $this->_request->getQuery(). Wenn Sie auf getParams() verallgemeinern, es ist ein bisschen wie die $_REQUEST Superglobal mit und ich glaube nicht, dass in Bezug auf die Sicherheit akzeptabel ist.

Zusätzlich zu Zend_Filter, können Sie auch einfach PHP verwenden, um den erforderlichen zu werfen.

Z. B .:

$id = (int) $this->_request->getQuery('id');

Für andere Werte, es wird noch komplizierter, so stellen Sie sicher, z.B. Zitat in Ihrem DB-Abfragen ( Zend_Db finden Sie unter Angabe Identifikatoren, $db->quoteIdentifier()) und in Ansichten verwenden $this->escape($var); Inhalt entweichen kann.

Sie können keine one-size-fits-all Validierungsfunktion für get / post-Daten schreiben. Da in einigen Fällen benötigen Sie ein Feld eine ganze Zahl und in anderen ein Datum zum Beispiel zu sein. Deshalb gibt es keine Eingabevalidierung in dem Zend Framework.

In Kürze erhalten Sie haben den Validierungscode an der Stelle zu schreiben, wo Sie es brauchen. Sie können einige Hilfsmethoden natürlich schreiben, aber man kann das getPost () zu validieren, etwas für euch alle von selbst nicht erwarten ...

Und es ist nicht einmal getPost / getQuery Platz zu etwas zu bestätigen, es ist Aufgabe ist es, Ihnen die Daten, die Sie wan't zu bekommen, was von dort mit ihm geschieht sollte es Sorge nicht sein.

$dataGet  = $this->getRequest()->getParam('id',null);
$valid = new Zend_Validate_Digits();

if( isset($dataGet) && $valid->isValid($dataGet) ){
 // do some...
} else{
  // not set
}
  

Ich habe immer verwendet, die mehr phpish $this->_request->getPost('this') und $this->_request->getQuery('that') (diese mit dem getQuery insteado von getGet nicht so sehr logisch zu sein).

     

Was ist das Beste dieser beiden ist? (Oder wenn Theres eine andere Art und Weise besser)

Nur eine kurze Erklärung über die Wahl der getQuery(). Die Formulierung Wahl kommt aus, welche Art von Daten ist es, nicht, wie es dort ankamen. GET und POST sind nur Anforderungsmethoden, alle Arten von Informationen tragen, einschließlich im Fall einer POST-Anforderung, ein Abschnitt als „post-Daten“ bekannt. Eine GET-Anforderung hat keinen solchen Block, jede variable Daten, die sie trägt, ein Teil der Abfragezeichenfolge der URL ist (der Teil nach dem?).

So, während getPost() die Daten aus dem Abschnitt einer POST-Anfrage Post-Daten erhält, getQuery() ruft Daten aus dem Abfrage-String entweder einem GET oder POST-Request (sowie anderem HTTP-Request-Verfahren).

(Beachten Sie, dass GET-Anforderungen sollten nicht für alles verwendet werden, die eine Nebenwirkung erzeugen könnte, wie eine DB-Reihe zu verändern)

in Antwort auf Ihre erste Frage also, verwenden Sie die getPost() und getQuery() Methoden, auf diese Weise können Sie sicher sein, wo die Datenquelle (wenn Sie sich nicht, getParams() funktioniert auch, aber können zusätzliche Daten enthalten).

  

Was ist die beste Praxis PHP-Eingangs mit diesen Methoden für die Validierung?

Der beste Platz Eingabe zu bestätigen ist, wo Sie zuerst verwenden. Das heißt, wenn Sie es von getParams(), getPost() oder getQuery() ziehen. Auf diese Weise sind Ihre Daten immer korrekt für wo Sie es brauchen, und wenn Sie es weg passieren, wissen Sie, es ist sicher. Denken Sie daran, wenn Sie es an einen anderen Controller (oder Controller Aktion) passieren, werden Sie wahrscheinlich wieder dort überprüfen sollten, nur um sicher zu sein. Wie Sie dies tun, hängt von Ihrer Anwendung, aber es muss noch geprüft werden.

nicht direkt mit dem Thema, aber um sicherzustellen, dass Sie eine Nummer in Ihrer Eingabe erhalten, könnte man auch $ var verwenden + 0 (Aber wenn $ var ist ein Schwimmer es bleibt ein Schwimmer) Sie können in den meisten Fällen verwenden $ Id = $ this -> _ request-> getQuery ( 'id') 0 ,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top