Rozdział 32. Zend_Uri

Spis treści

32.1. Zend_Uri
32.1.1. Wstęp
32.1.2. Tworzenie nowego URI
32.1.3. Manipulowanie istniejącym URI
32.1.4. Sprawdzanie poprawności URI
32.1.5. Wspólne metody instancji

32.1. Zend_Uri

32.1.1. Wstęp

Zend_Uri jest komponentem, który pomaga w manipulowaniu i sprawdzaniu poprawności adresem Uniform Resource Identifier (URI). Klasa Zend_Uri istnieje głownie aby obsłużyć inne komponenty takie jak na przykład Zend_Http_Client ale także jest użyteczna jako osobne narzędzie.

Adresy URI zawsze zaczynają się nazwą schematu zakończoną średnikiem. Konstrukcje różnych schematów różnią się od siebie znacząco. Klasa Zend_Uri zapewnia fabrykę, która zwracą swoją podklasę specjalizującą się w danym schemacie. Podklasa będzie nazwana Zend_Uri_<scheme>, gdzie <scheme> jest nazwą schematu zamienioną na małe litery z pierwszą literą zamienioną na wielką. Wyjątkiem od tej reguły jest schemat HTTPS, który także jest obsługiwany przez klasę Zend_Uri_Http.

32.1.2. Tworzenie nowego URI

Zend_Uri zbuduje nowy URI z szablonu jeśli do metody Zend_Uri::factory() przekazana jest tylko nazwa schematu.

Przykład 32.1. Tworzenie nowego URI za pomocą Zend_Uri::factory()

<?php

require_once 'Zend/Uri.php';

// Aby utworzyć URI z szablonu, przekaż tylko schemat.
$uri = Zend_Uri::factory('http');

// $uri jest instancją Zend_Uri_Http
 
?>

Aby utworzyć nowy URI z szablonu, przekaż tylko nazwę schematu do metody Zend_Uri::factory()[11]. Jeśli przekazana jest nazwa nieobsługiwanego schematu, wyrzucony będzie wyjątek Zend_Uri_Exception.

Jeśli schemat lub przekazany URI jest obsługiwany, metoda Zend_Uri::factory() zwróci swoją podklasę, która specjalizuje się w schemacie który ma zostać utworzony.

32.1.3. Manipulowanie istniejącym URI

Aby manipulować istniejącym URI, przekaż cały URI do Zend_Uri::factory().

Przykład 32.2. Manipulowanie istniejącym URI za pomocą Zend_Uri::factory()

<?php

require_once 'Zend/Uri.php';

// Aby manipulować istniejącym URI, przekaż go do metody fabryki.
$uri = Zend_Uri::factory('http://www.zend.com');

// $uri jest instancją Zend_Uri_Http
 
?>

URI zostanie przetworzony i zostanie sprawdzona jego poprawność. Jeśli okaże się, że jest niepoprawny, od razu zostanie wyrzucony wyjątek Zend_Uri_Exception. W przeciwnym wypadku, metoda Zend_Uri::factory() zwróci swoją podklasę specjalizującą się w schemacie URI, którym chcemy manipulować.

32.1.4. Sprawdzanie poprawności URI

Funkcja Zend_Uri::check() może być użyta jeśli potrzebne jest tylko sprawdzenie poprawności istniejącego URI.

Przykład 32.3. Sprawdzanie poprawności URI za pomocą Zend_Uri::check()

<?php

require_once 'Zend/Uri.php';

// Sprawdź czy podany URI ma poprawny format
$valid = Zend_Uri::check('http://uri.in.question');

// $valid ma wartość TRUE dla poprawnego URI, lub FALSE w przeciwnym wypadku.
 
?>

Zend_Uri::check() zwraca wartość logiczną, co jest bardziej wygodne niż używanie Zend_Uri::factory() i wyłapywanie wyjątku.

32.1.5. Wspólne metody instancji

Każda instancja podklasy Zend_Uri (np. Zend_Uri_Http) ma kilka metod, ktore są użyteczne do pracy z rożnego rodzaju URI.

32.1.5.1. Pobieranie schematu URI

Nazwa schematu URI jest częścią URI, która znajduje się przed dwukropkiem. Na przykład nazwą schematu adresu http://www.zend.com jest http.

Przykład 32.4. Pobieranie schematu z obiektu Zend_Uri_*

<?php

require_once 'Zend/Uri.php';

$uri = Zend_Uri::factory('http://www.zend.com');

$scheme = $uri->getScheme();  // "http"
 
?>

Metoda getScheme() zwraca tylko schemat z obiektu URI.

32.1.5.2. Pobieranie całego URI

Przykład 32.5. Pobieranie całego URI z obiektu Zend_Uri_*

<?php

require_once 'Zend/Uri.php';

$uri = Zend_Uri::factory('http://www.zend.com');

echo $uri->getUri();  // "http://www.zend.com"
 
?>

Metoda getUri() zwraca reprezentację całego URI jako łańcuch znaków.

32.1.5.3. Sprawdzanie poprawności URI

Zend_Uri::factory() zawsze sprawdzi poprawność przekazanego do niej URI i nie utworzy nowej instancji podklasy Zend_Uri jeśli podany adres URI jest niepoprawny. Jakkolwiek, po tym jak zostanie utworzona instancja podklasy Zend_Uri dla nowego URI lub dla poprawnego istniejącego, możliwe jest to, że URI później może stać się niepoprawny, po tym jak będziemy nim manipulować.

Przykład 32.6. Sprawdzanie poprawności obiektu Zend_Uri_*

<?php

require_once 'Zend/Uri.php';

$uri = Zend_Uri::factory('http://www.zend.com');

$isValid = $uri->valid();  // TRUE
 
?>

Metoda valid() zapewnia możliwość sprawdzenia czy obiekt URI jest wciąż poprawny.



[11] Obecnie, Zend_Uri obsługuje tylko schematy HTTP oraz HTTPS.