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