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

### 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()` Obecnie, Zend_Uri obsługuje tylko schematy HTTP oraz HTTPS.. 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()`.

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

### 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`.

#### 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

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

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