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',
);
Url
sınıfı, JsonSerializable
arayüzünü uygular ve __toString()
yöntemini
sağlayarak nesneyi yazdırmayı veya json_encode()
ile kullanmayı mümkün kılar.
echo $url;
echo json_encode([$url]);
URL Components
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): string
Ana bilgisayarın sağ veya sol kısmını döndürür. Ana bilgisayar www.nette.org
ise şu ş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) |
'' |
isEqual (string|Url $anotherUrl): bool
İki URL'nin aynı olup olmadığını kontrol eder.
$url->isEqual('https://nette.org');
Url::isAbsolute (string $url): bool
Bir URL'nin mutlak olup olmadığını kontrol eder. Bir URL, bir şema (örn. http, https, ftp) ve ardından iki nokta üst üste ile başlıyorsa mutlak olarak kabul edilir.
Url::isAbsolute('https://nette.org'); // true
Url::isAbsolute('//nette.org'); // false
Url::removeDotSegments (string $path): string
.
ve ..
özel segmentlerini kaldırarak bir URL yolunu normalleştirir. Bu yöntem, tarayıcıların
yaptığı gibi gereksiz yol öğelerini kaldırır.
Url::removeDotSegments('/path/../subtree/./file.txt'); // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar'); // '/foo/bar'
Url::removeDotSegments('./today/../file.txt'); // 'file.txt'
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'
UrlImmutable
sınıfı, JsonSerializable
arayüzünü uygular ve nesneyi yazdırmanıza veya
json_encode()
ile kullanmanıza olanak tanıyan __toString()
yöntemini sağlar.
echo $url;
echo json_encode([$url]);
URL Components
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 |
withoutUserInfo()
yöntemi user
ve password
adreslerini kaldırır.
Ayrıca kullanarak 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): string
Ana bilgisayarın sağ veya sol kısmını döndürür. Ana bilgisayar www.nette.org
ise şu ş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) |
'' |
resolve (string $reference): UrlImmutable
Mutlak bir URL'yi, bir tarayıcının HTML sayfasındaki bağlantıları işlediği şekilde çözümler:
- Bağlantı mutlak bir URL ise (bir şema içeriyorsa), değiştirilmeden kullanılır.
- Bağlantı
//
ile başlıyorsa, yalnızca geçerli URL'deki şema uygulanır. - Bağlantı
/
ile başlıyorsa, etki alanı kökünden mutlak bir yol oluşturulur. - Diğer durumlarda, URL geçerli yola göre oluşturulur.
$url = new UrlImmutable('https://example.com/path/page');
echo $url->resolve('../foo'); // 'https://example.com/foo'
echo $url->resolve('/bar'); // 'https://example.com/bar'
echo $url->resolve('sub/page.html'); // 'https://example.com/path/sub/page.html'
isEqual (string|Url $anotherUrl): bool
İki URL'nin aynı olup olmadığını kontrol eder.
$url->isEqual('https://nette.org');
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.