URL Ayrıştırıcı ve Oluşturucu

Url, UrlImmutable ve UrlScript sınıfları URL'leri yönetmeyi, ayrıştırmayı ve değiştirmeyi kolaylaştırır.

Kurulum ve gereksinimler

Url

Nette\Http\Url sınıfı, URL ve bu diyagramda ana hatlarıyla belirtilen bileşenleriyle çalışmayı kolaylaştırır:

scheme  user  password  host   port    path        query  fragment
  |      |      |        |      |       |            |       |
/--\   /--\ /------\ /-------\ /--\/----------\ /--------\ /----\
http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer
\______\__________________________/
    |               |
 hostUrl        authority

URL oluşturma sezgiseldir:

use Nette\Http\Url;

$url = new Url;
$url->setScheme('https')
	->setHost('localhost')
	->setPath('/edit')
	->setQueryParameter('foo', 'bar');

echo $url; // 'https://localhost/edit?foo=bar'

Ayrıca URL'yi ayrıştırabilir ve ardından değiştirebilirsiniz:

$url = new Url(
	'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);

Tek tek URL bileşenlerini almak veya değiştirmek için aşağıdaki yöntemler kullanılabilir:

Ayarlayıcı Getirici Dönen değer
setScheme(string $scheme) getScheme(): string 'http'
setUser(string $user) getUser(): string 'john'
setPassword(string $password) getPassword(): string 'xyz*12'
setHost(string $host) getHost(): string 'nette.org'
setPort(int $port) getPort(): ?int 8080
  getDefaultPort(): ?int 80
setPath(string $path) getPath(): string '/en/download'
setQuery(string|array $query) getQuery(): string 'name=param'
setFragment(string $fragment) getFragment(): string 'footer'
  getAuthority(): string 'nette.org:8080'
  getHostUrl(): string 'http://nette.org:8080'
  getAbsoluteUrl(): string tam URL

Uyarı: Bir HTTP isteğinden elde edilen bir URL ile çalışırken, tarayıcı bunu sunucuya göndermediği için parçayı içermeyeceğini unutmayın.

Ayrıca tek tek sorgu parametreleri ile de işlem yapabiliriz:

Ayarlayıcı Getirici
setQuery(string|array $query) getQueryParameters(): array
setQueryParameter(string $name, $val) getQueryParameter(string $name)

getDomain(int $level = 2) yöntemi, ana bilgisayarın sağ veya sol kısmını döndürür. Ana bilgisayar www.nette.org ise bu şekilde çalışır:

getDomain(1) 'org'
getDomain(2) 'nette.org'
getDomain(3) 'www.nette.org'
getDomain(0) 'www.nette.org'
getDomain(-1) 'www.nette'
getDomain(-2) 'www'
getDomain(-3) ''

Url sınıfı, JsonSerializable arayüzünü uygular ve nesnenin yazdırılabilmesi veya json_encode() adresine aktarılan verilerde kullanılabilmesi için bir __toString() yöntemine sahiptir.

echo $url;
echo json_encode([$url]);

Yöntem isEqual(string|Url $anotherUrl): bool iki URL'nin aynı olup olmadığını test eder.

$url->isEqual('https://nette.org');

UrlImmutable

Nette\Http\UrlImmutable sınıfı Url sınıfına değişmez bir alternatiftir (tıpkı PHP'de DateTimeImmutable sınıfının DateTime sınıfına değişmez bir alternatif olması gibi). Ayarlayıcılar yerine, nesneyi değiştirmeyen, ancak değiştirilmiş bir değerle yeni örnekler döndüren sözde solduruculara sahiptir:

use Nette\Http\UrlImmutable;

$url = new UrlImmutable(
	'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);

$newUrl = $url
	->withUser('')
	->withPassword('')
	->withPath('/en/');

echo $newUrl; // 'http://nette.org:8080/en/?name=param#footer'

Tek tek URL bileşenlerini almak veya değiştirmek için aşağıdaki yöntemler kullanılabilir:

Wither Getter Dönen değer
withScheme(string $scheme) getScheme(): string 'http'
withUser(string $user) getUser(): string 'john'
withPassword(string $password) getPassword(): string 'xyz*12'
withHost(string $host) getHost(): string 'nette.org'
withPort(int $port) getPort(): ?int 8080
  getDefaultPort(): ?int 80
withPath(string $path) getPath(): string '/en/download'
withQuery(string|array $query) getQuery(): string 'name=param'
withFragment(string $fragment) getFragment(): string 'footer'
  getAuthority(): string 'nette.org:8080'
  getHostUrl(): string 'http://nette.org:8080'
  getAbsoluteUrl(): string tam URL

Ayrıca tek tek sorgu parametreleri ile de işlem yapabiliriz:

Solan Getter
withQuery(string|array $query) getQueryParameters(): array
withQueryParameter(string $name, $val) getQueryParameter(string $name)

getDomain(int $level = 2) yöntemi Url'daki yöntemle aynı şekilde çalışır. withoutUserInfo() yöntemi user ve password adreslerini kaldırır.

UrlImmutable sınıfı, JsonSerializable arayüzünü uygular ve nesnenin yazdırılabilmesi veya json_encode() adresine aktarılan verilerde kullanılabilmesi için bir __toString() yöntemine sahiptir.

echo $url;
echo json_encode([$url]);

isEqual(string|Url $anotherUrl): bool yöntemi iki URL'nin aynı olup olmadığını test eder.

UrlScript

Nette\Http\UrlScript sınıfı, UrlImmutable sınıfının soyundan gelir ve ek olarak URL'nin bu mantıksal bölümlerini ayırt eder:

     baseUrl    basePath  relativePath  relativeUrl
        |          |        |               |
/---------------/-----\/--------\---------------------------\
http://nette.org/admin/script.php/pathinfo/?name=param#footer
                \_______________/\________/
                       |              |
                  scriptPath       pathInfo

Bu parçaları almak için aşağıdaki yöntemler kullanılabilir:

Getter Dönen değer
getScriptPath(): string '/admin/script.php'
getBasePath(): string '/admin/'
getBaseUrl(): string 'http://nette.org/admin/'
getRelativePath(): string 'script.php'
getRelativeUrl(): string 'script.php/pathinfo/?name=param#footer'
getPathInfo(): string '/pathinfo/'

Doğrudan UrlScript nesnesi oluşturmuyoruz, ancak Nette\Http\Request::getUrl() yöntemi bunu döndürüyor.

versiyon: 4.0