Inhaltsverzeichnis
Zend_Uri
ist eine Komponente, die das Verändern und Validieren von
Uniform Resource Identifiers (URIs)
unterstützt. Zend_Uri
existiert hauptsächlich, um andere Komponenten wie z.B.
Zend_Http_Client
zu unterstützen, aber ist auch als eigenständiges Hilfsmittel
nützlich.
URIs beginnen immer mit einem Schema, gefolgt von einem Doppelpunkt. Der Aufbau der vielen
unterschiedlichen Schemata unterscheidet sich erheblich. Die Zend_Uri
stellt
eine Fabrik (Factory) bereit, die eine Unterklasse von sich selber zurück gibt, die auf das
entsprechende Schema spezialisiert ist. Diese Unterklasse heißt
Zend_Uri_<scheme>
, wobei <scheme>
das Schema in
Kleinbuchstaben mit einem Großbuchstaben am Anfang darstellt. Eine Ausnahme dieser Regel ist
HTTPS, das auch von Zend_Uri_Http
verarbeitet wird.
Zend_Uri
erstellt eine neue URI von Grund auf, wenn nur das Schema an
Zend_Uri::factory()
übergeben wurde.
Beispiel 32.1. Erstellen einer neuen URI mit Zend_Uri::factory()
<?php require_once 'Zend/Uri.php'; // Um eine neue URI von Grund auf zu erstellen, übergebe nur das Schema. $uri = Zend_Uri::factory('http'); // $uri instanceof Zend_Uri_Http ?>
Um eine neue URI von Grund auf zu erstellen, übergibt man nur das Schema an
Zend_Uri::factory()
[11] . Wenn eine nicht unterstütztes
Schema übergeben wird, wird eine Zend_Uri_Exception
ausgeworfen.
Wenn das Schema oder die übergebene URI unterstützt wird, gibt
Zend_Uri::factory()
eine Unterklasse von sich selbst zurück, die auf das zu
erstellende Schema spezialisiert ist.
Um eine vorhandene URI zu verändern, übergibt man die komplett URI an
Zend_Uri::factory()
.
Beispiel 32.2. Verändern einer vorhandenen URI mit Zend_Uri::factory()
<?php require_once 'Zend/Uri.php'; // Um eine vorhandene URI zu verändern, übergibt man sie. $uri = Zend_Uri::factory('http://www.zend.com'); // $uri instanceof Zend_Uri_Http ?>
Die URI wird analysiert und validiert. Wenn sie als ungültig erkannt wird, wird sofort eine
Zend_Uri_Exception
geworfen. Andernfalls gibt Zend_Uri::factory()
eine Unterklasse von sich selbst zurück, die auf das zu verändernde Schema spezialisiert
ist.
Die Zend_Uri::check()
Methode kann verwendet werden, wenn nur das Validieren
einer vorhandenen URI benötigt wird.
Beispiel 32.3. URI Validierung mit Zend_Uri::check()
<?php require_once 'Zend/Uri.php'; // Überprüfe, ob eine übergebe URI wohlgeformt ist $valid = Zend_Uri::check('http://uri.in.question'); // $valid ist TRUE für eine valide URI, andernfalls FALSE ?>
Zend_Uri::check()
gibt ein Boolean zurück, was einfacher ist, als
Zend_Uri::factory()
zu verwenden und eine Ausnahme abzufangen.
Jede Instant einer Zend_Uri
Unterklasse (z.B. Zend_Uri_Http
) hat
verschiedene Instanzmethoden, die für die Verwendung mit jeglicher URI nützlich sind.
Das Schema der URI ist der Teil der URI vor dem Doppelpunkt. Zum Beispiel ist
http
das Schema von http://www.zend.com
.
Beispiel 32.4. Das Schema eines Zend_Uri_*
Objektes erhalten
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); $scheme = $uri->getScheme(); // "http" ?>
Die getScheme()
Instanzmethode gibt nur das Schema des URI Objektes
zurück.
Beispiel 32.5. Die komplette URI eines Zend_Uri_*
Objektes erhalten
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); echo $uri->getUri(); // "http://www.zend.com" ?>
Die getUri()
Methode gibt den String zurück, der die komplette URI
repräsentiert.
Zend_Uri::factory()
validiert immer jede übergebene URI und wird keine
Zend_Uri
Unterklasse instantieren, wenn die übergebene URI ungültig ist.
Dennoch ist es nach der Instanzierung der Zend_Uri
Unterklasse für eine neue
oder eine bestehende URI möglich, dass die URI später ungültig wird, nachdem sie verändert
worden ist.
Beispiel 32.6. Ein Zend_Uri_*
Object validieren
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); $isValid = $uri->valid(); // TRUE ?>
Die valid()
Instanzmethode ermöglicht es, das URI Objekt auf Gültigkeit zu
überprüfen.