URL'lerle Çalışma
Url, UrlImmutable ve UrlScript sınıfları, URL'leri kolayca oluşturmayı, ayrıştırmayı ve işlemeyi sağlar.
Url
Nette\Http\Url sınıfı, URL'ler ve bu çizimde yakalanan tek tek bileşenleriyle kolayca çalışmanıza olanak tanır:
şema kullanıcı şifre ana bilgisayar port yol sorgu 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 bir URL'yi ayrıştırabilir ve daha fazla işleyebilirsiniz:
$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()
metoduna sahiptir,
böylece nesne yazdırılabilir veya json_encode()
'a iletilen verilerde kullanılabilir.
echo $url;
echo json_encode([$url]);
URL Bileşenleri
Tek tek URL bileşenlerini döndürmek veya değiştirmek için şu metotlar kullanılabilir:
Ayarlayıcı | Alıcı | Döndürülen 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 |
'john:xyz%2A12@nette.org:8080' |
|
getHostUrl(): string |
'http://john:xyz%2A12@nette.org:8080' |
|
getAbsoluteUrl(): string |
tüm URL |
Uyarı: HTTP isteğinden alınan bir URL ile çalışırken, tarayıcı sunucuya göndermediği için fragment içermeyeceğini unutmayın.
Ayrıca tek tek sorgu parametreleriyle de çalışabiliriz:
Ayarlayıcı | Alıcı |
---|---|
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ı doğrular.
$url->isEqual('https://nette.org');
Url::isAbsolute (string $url): bool
Bir URL'nin mutlak olup olmadığını doğrular. Bir URL, bir şema (ör. http, https, ftp) ve ardından iki nokta üst üste ile başlıyorsa mutlak kabul edilir.
Url::isAbsolute('https://nette.org'); // true
Url::isAbsolute('//nette.org'); // false
Url::removeDotSegments (string $path): string
Özel .
ve ..
segmentlerini kaldırarak URL'deki yolu normalleştirir. Metot, gereksiz yol
öğelerini web tarayıcılarının yaptığı gibi 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ının değişmez (immutable) bir alternatifidir (PHP'deki DateTimeImmutable
'ın
DateTime
'ın değişmez alternatifi olması gibi). Ayarlayıcılar yerine, nesneyi değiştirmeyen ancak
değiştirilmiş bir değere sahip yeni örnekler döndüren wither'lara 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('/cs/');
echo $newUrl; // 'http://john:xyz%2A12@nette.org:8080/cs/?name=param#footer'
UrlImmutable
sınıfı JsonSerializable
arayüzünü uygular ve __toString()
metoduna
sahiptir, böylece nesne yazdırılabilir veya json_encode()
'a iletilen verilerde kullanılabilir.
echo $url;
echo json_encode([$url]);
URL Bileşenleri
Tek tek URL bileşenlerini döndürmek veya değiştirmek için şu metotlar kullanılır:
Wither | Alıcı | Döndürülen 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 |
'john:xyz%2A12@nette.org:8080' |
|
getHostUrl(): string |
'http://john:xyz%2A12@nette.org:8080' |
|
getAbsoluteUrl(): string |
tüm URL |
withoutUserInfo()
metodu user
ve password
'ü kaldırır.
Ayrıca tek tek sorgu parametreleriyle de çalışabiliriz:
Wither | Alıcı |
---|---|
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 URL'yi tarayıcının HTML sayfasındaki bağlantıları işlediği gibi türetir:
- bağlantı mutlak bir URL ise (şema içeriyorsa), değişiklik yapılmadan kullanılır
- bağlantı
//
ile başlıyorsa, yalnızca geçerli URL'den şema alınır - bağlantı
/
ile başlıyorsa, alan adının kökünden mutlak bir yol oluşturulur - diğer durumlarda, URL geçerli yola göre göreceli olarak 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ı doğrular.
$url->isEqual('https://nette.org');
UrlScript
Nette\Http\UrlScript sınıfı, UrlImmutable sınıfının bir alt sınıfıdır ve onu projenin kök dizini vb. gibi ek sanal URL bileşenleriyle genişletir. Üst sınıfı gibi, değişmez (immutable) bir nesnedir.
Aşağıdaki diyagram, UrlScript'in tanıdığı bileşenleri gösterir:
baseUrl basePath relativePath relativeUrl | | | | /---------------/-----\/--------\---------------------------\ http://nette.org/admin/script.php/pathinfo/?name=param#footer \_______________/\________/ | | scriptPath pathInfo
baseUrl
, alan adı ve uygulamanın kök dizinine giden yolun bir bölümü dahil olmak üzere uygulamanın temel URL adresidirbasePath
, uygulamanın kök dizinine giden yolun bir bölümüdürscriptPath
, geçerli betiğe giden yoldurrelativePath
, basePath'e göre betiğin adıdır (ve muhtemelen ek yol segmentleri)relativeUrl
, sorgu dizesi ve fragment dahil olmak üzere baseUrl'den sonraki URL'nin tüm bölümüdür.pathInfo
, günümüzde betik adından sonraki URL'nin nadiren kullanılan bir bölümüdür
URL'nin bölümlerini döndürmek için şu metotlar kullanılabilir:
Alıcı | Döndürülen 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/' |
UrlScript
nesneleri genellikle doğrudan oluşturulmaz, ancak geçerli HTTP isteği için zaten doğru şekilde
ayarlanmış bileşenlerle Nette\Http\Request::getUrl() metodu tarafından
döndürülür.