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',
);

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.

versiyon: 4.0