XML definierte Zend_Forms – Validierung auf HTML Tags

Problem:
Eine über eine xml-Datei konfiguierte Zend_Form sollte validiert werden. Es sollte u.a. überprüft werden, ob HTML-Tags eingegeben wurden. Falls dies der Fall war, sollte das Formular nicht abgeschickt werden. Dazu wurde folgende Konfiguration (Auszug) verwendet:

<text type="textarea">
	<options required="1">
		<validators>
			<regex validator="Regex">
				<options>
					<pattern>(/[^<].*[>]/)</pattern>
				</options>
			</regex>
		</validators>
	</options>
</text>

Das Pattern ist in diesem Fall noch inkorrekt, da innerhalb von XML keine Zeichen wie „<" und "&" erlaubt sind. Der nächste Versuch war, die Zeichen mittels SQL Entities darzustellen.
Das Pattern sah dann wie folgt aus:

<pattern>(/[^&lt;].*[&gt;]/)</pattern>

Aber selbst dieser Ansatz brachte keine Lösung. Ein nächster Versuch war das einbetten des Codes in einen CDATA-Block.

<pattern><![CDATA["(/[^<].*[>]/)"]]></pattern>

Doch selbst dieser Ansatz lieferte weiterhin keine Lösung. Das Formular wurde nicht korrekt validiert.

Ein anderer Lösungsansatz brachte letztendlich den Erfolg: Das Schreiben einer eigenen Validatorklasse. In der XML-Konfiguration des Formulars muss nun nur noch folgender Aufruf stehen:

<text type="textarea">
	<options required="1">
		<validators>
			<regex validator="HtmlCheck" />
		</validators>
	</options>
</text>

Es wird nun der Validator HtmlCheck aufgerufen. Diesen müssen wir nun noch definieren. Wir legen dazu eine passende Validatorklasse an:

class Validate_HtmlCheck extends Zend_Validate_Abstract
{
	// [...]
	public function isValid($value)
	{
		//Prüfen, ob HTML Tags gesetzt wurden
		if($value!=strip_tags($value))
		{
			return false;
		}

		//Ansonsten true
		return true;
	}
}

Eventuell müsst ihr den Klassennamen entsprechend eurer eigenen Projektstruktur anpassen. Damit funktionierte das Validieren des Formulars auf HTML-Tags, wenn ihr euer Formular über XML definiert habt.

Vielleicht habt ihr ja noch eine elegantere Lösung?

Zend_Form über XML validieren

Ich habe auf slideshare.net ein gutes Tutorial zu Zend_Form in Verbindung mit XML gefunden.

Link:Zend Form Tutorial

Ein weiteres Tutorial, welches sich mit Zend_Form und XML beschäftigt, findet man auf der Seite von Pieter.

Passend dazu gibts auf der Zend Framework Seite eine Dokumentation zu den Validators.

Zend Acl – Zugriff auf spezielle Ressource prüfen

Um zu Prüfen ob eine Benutzergruppe auf eine Ressource zugreifen darf kann man folgendes Code-Snippet benutzen:

$acl->isAllowed($auth->getIdentity()->role,'bibo','buchanlegen');

Die Funktion isAllowed() erwartet dabei die Parameter Benutzerrolle, Modul und Action.

Im obigen Beispiel wird in der View geprüft, ob die Rolle des aktuell eingeloggten Benutzers im Modul „bibo“ auf die Action „buchanlegen“ zugreifen darf.

Zend Tutorial – Zend Acl über ini-Datei

Es existieren 2 Module:

  • bibo (Bücherverwaltung)
  • login (Loginmodul)

Folgendes Rechtemanagement soll umgesetzt werden:
admin, user, guest

  • Admin bekommt vollen Zugriff auf auf Modul bibo und Modul login
  • User bekommt Zugriff
    • auf die Bibo-Actions: Index, Ausleihen, Zurückgeben, Suchen
    • vollen Zugriff auf Login
  • gast bekommt Zugriff
    • auf die Bibo-Action: Index
    • auf die Login-Actions:index, login (logout braucht der gast nicht, sonst wäre er ein user)

Das Rechtemanagement soll über ein .ini-Datei konfigurierbar sein.
Weiterlesen →

Zend Tutorial – 03 – Weitere Actions

1. In diesem Teil des Tutorials wagen wir uns an weitere Actions und somit auch an eine Erweiterung unserer Anwendung. Ziel ist es, unseren IndexController um die Funktionen des Anlegens, Bearbeitens und Löschens zu erweitern. Wir werden auch mit den Zend_Forms in Berührung kommen, die uns die Arbeit mit Formularen vereinfachen sollen.
Weiterlesen →

Zend Tutorial – 02 – Datenbankhandling

1. Die Dateien, die für den Datenbankzugriff verantwortlich sind, sollen sich im Modulordner „bibo“ im Unterordner „models“ befinden. Dieser Ordner ist aktuell noch leer. Das wird sich recht schnell ändern. Legt im Ordner application/modules/bibo/models einen Unterordner „DbTable“ an. Achtet auch auf die casesensitive Schreibweise. In diesem Ordner machen wir jede Tabelle seperat bekannt.
Weiterlesen →

Zend Tutorial – 01 – Erste Schritte

1. Eclipse öffnen -> File -> New -> PHP Project

  • Project name: Bibotest
  • Create project at existing location (from existing source) auswählen
  • Pfad angeben: *\projects\bibotest\htdocs\bibotest
  • Finish drücken
  • Nun habt Ihr eure erste Zend Applikation in Eclipse eingebunden.

* ist euer Pfad zum Projekt
2. Erstellt werden soll ein simples Bibliotheksystem mit Bücheransicht, Bücherausleihe und der Möglichkeit Bücher anzulegen, zu bearbeiten und zu löschen. Desweiteren soll eine Möglichkeit existieren den Buchbestand zu durchsuchen. In einem zweiten Schritt soll eine simple Benutzerverwaltung integriert werden.
Weiterlesen →