Phalcon – Validierung und Filterung von Formularwerten

Da die offizielle Phalcon Dokumentation zum Thema „automatische Filterung von Formularwerten“ noch recht lückenhaft ist, folgt hier eine kurze Beschreibung zur Vorgehensweise.

Als Beispiel dient eine einfache Formularklasse mit einem Formularfeld.
Mit den Funktionen „addFilter“ und „addValidator“ werden die Filter und die Validatoren für das Formularfeld definiert.
In diesem Fall werden der ’striptag‘ Filter (Entfernt HTML Tags) und ‚trim‘ Filter (entfernt Leerzeichen) definiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class ExampleForm extends BaseForm
{
    public function getForm()
    {
       $this->add($this->getExampleFormField());
       ...
       // weitere Formularfelder einfügen	
    }
    protected function getExampleFormField()
    {
        $field = (new Text('exampleField'))
            ->setAttribute('id', 'exampleFieldId')
            ->setAttribute('name', 'exampleFieldName')
            ->addFilter('trim')
            ->addFilter('striptags')
            ->addValidator(new PresenceOf(array(
  		  'message' => 'The exampleField is required'
	    )));
        ;
        return $field;
    }

Im Controller wird das Formular erstellt und falls es per Post abgeschickt wurde, verarbeitet.
Wichtig für die automatische Filterung ist dabei, dass man beim Erstellen der Formularklasse das zugehörige Entity Model übergibt und das die Post Werte per „bind“ an das Formular übergeben werden.
Durch die „bind“ Funktion werden die gefilterten Werte automatisch an das Entity Model übergeben, so dass man im einfachsten Fall das Entity Model dann direkt speichern kann, sofern das Formalar erfolgreich validiert wurde.

1
2
3
4
5
6
7
8
9
$modelEntity = ModelEntity::findFirst('id = ' . $exampleId);
$form = (new ExampleForm($modelEntity))->getForm();
if ($this->request->isPost() {
   $form->bind($$this->request->getPost(), $form->getEntity());
   if ($form->isValid($this->request->getPost())) {
     if ($modelEntity->save() === false) {
        $this->flashSession->error('Error saving data: ' . implode(',' , $modelEntity->getErrorMessages()));
     }
}

Wenn man die Filter vernünftig konfiguriert und einsetzt, kann man z.B. die Gefahr verringern, dass man schädlichen Javscript Code ungefiltert in der Datenbank speichert.

Dieser Beitrag wurde unter Phalcon abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Die Kommentarfunktion ist geschlossen.