URL Yardımcı Programı
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 (PHP'de DateTimeImmutable
'in DateTime
'ye değişmez bir alternatif olmasına benzer şekilde). Setter'lar yerine, nesneyi değiştirmeyen ancak değiştirilen değerle
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('/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 onu projenin kök dizini vb. gibi ek sanal URL bileşenleriyle genişletir. Ana sınıfı gibi, değişmez bir nesnedir.
Aşağıdaki şemada UrlScript'in tanıdığı bileşenler gösterilmektedir:
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 kısmını içeren uygulamanın temel URL'sidirbasePath
uygulamanın kök dizinine giden yolun bir parçasıdırscriptPath
geçerli betiğin yoludurrelativePath
basePath'e göre kod adıdır (ve muhtemelen ek yol segmentleridir)relativeUrl
, sorgu dizesi ve parça dahil olmak üzere URL'nin baseUrl'den sonraki tüm kısmıdır.pathInfo
, URL'nin komut dosyası adından sonra artık nadiren kullanılan bir parçasıdır
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.