Zend_Uri

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.

Tworzenie nowego URI

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

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

// 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()[31]. 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.

Manipulowanie istniejącym URI

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

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

// 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ć.

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 923. Sprawdzanie poprawności URI za pomocą Zend_Uri::check()

// 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.

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.

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 924. Pobieranie schematu z obiektu Zend_Uri_*

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

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

        

Metoda getScheme() zwraca tylko schemat z obiektu URI.

Pobieranie całego URI

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

$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.

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 926. Sprawdzanie poprawności obiektu Zend_Uri_*

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

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

          

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



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