URL'lerle Çalışma

Url, UrlImmutable ve UrlScript sınıfları, URL'leri kolayca oluşturmayı, ayrıştırmayı ve işlemeyi sağlar.

Kurulum ve gereksinimler

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 adresidir
  • basePath, uygulamanın kök dizinine giden yolun bir bölümüdür
  • scriptPath, geçerli betiğe giden yoldur
  • relativePath, 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.

versiyon: 4.0