Nette Documentation Preview

syntax
URL'lerle Çalışma
*****************

.[perex]
[#Url], [#UrlImmutable] ve [#UrlScript] sınıfları, URL'leri üretmeyi, ayrıştırmayı ve onlarla çalışmayı kolaylaştırır.

→ [Kurulum ve gereksinimler |@home#Kurulum]


Url
===

[api:Nette\Http\Url] sınıfı, URL'lerle ve tek tek bileşenleriyle kolayca çalışmaya olanak tanır; şu şemada gösterildiği gibi:

/--pre
 scheme  user  password  host   port    path        query  fragment
   |      |      |        |      |       |            |       |
 /--\   /--\ /------\ /-------\ /--\/----------\ /--------\ /----\
 <b>http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer</b>
 \______\__________________________/
     |               |
  hostUrl        authority
\--

URL üretmek sezgiseldir:

```php
use Nette\Http\Url;

$url = new Url;
$url->setScheme('https')
	->setHost('localhost')
	->setPath('/edit')
	->setQueryParameter('foo', 'bar');

echo $url; // 'https://localhost/edit?foo=bar'
```

Bir URL'yi ayrıştırıp sonra onunla çalışabilirsiniz de:

```php
$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 bir `__toString()` metodu vardır; dolayısıyla nesne yazdırılabilir ya da `json_encode()` fonksiyonuna verilen veride kullanılabilir.

```php
echo $url;
echo json_encode([$url]);
```


URL Bileşenleri
---------------

Tek tek URL bileşenlerini almak ya da değiştirmek için şu metotlar kullanılabilir:

.[language-php]
| Setter									| Getter						| 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` 	| URL'nin tamamı

`getUser()`, `getPassword()`, `setUser()` ve `setPassword()` metotları kullanımdan kaldırıldı; çünkü kimlik bilgilerini doğrudan URL'ye gömmek önerilmez.

Uyarı: Bir [HTTP isteğinden |request] alınan URL ile çalışırken, tarayıcı fragment'ı sunucuya göndermediği için onun fragment içermeyeceğini unutmayın.

Tek tek sorgu parametreleriyle de şunları kullanarak çalışabiliriz:

.[language-php]
| Setter									| Getter
|---------------------------------------------------
| `setQuery(string\|array $query)`  		| `getQueryParameters(): array`
| `setQueryParameter(string $name, $val)`	| `getQueryParameter(string $name)`
| `appendQuery(string|array $query)`	    |


getDomain(int $level = 2): string .[method]
-------------------------------------------
Host'un sağ ya da sol parçasını döndürür. Host `www.nette.org` ise şöyle çalışır:

.[language-php]
| `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 $url): bool .[method]
----------------------------------------
İki URL'nin özdeş olup olmadığını denetler.

```php
$url->isEqual('https://nette.org');
```


canonicalize() .[method]
------------------------
URL'yi kurallı biçime dönüştürür. Bu, host adını küçük harfe çevirir ve yolu normalleştirir (yüzde kodlaması ve gereksiz karakterlerin kaldırılması). Sorgu dizesi değiştirilmeden bırakılır.


Url::isAbsolute(string $url): bool .[method]{data-version:3.3.2}
----------------------------------------------------------------
Bir URL'nin mutlak olup olmadığını denetler. Bir URL, bir şemayla (örneğin http, https, ftp) ve ardından iki nokta üst üste ile başlıyorsa mutlak sayılır.

```php
Url::isAbsolute('https://nette.org');    // true
Url::isAbsolute('//nette.org');          // false
```


Url::removeDotSegments(string $path): string .[method]{data-version:3.3.2}
--------------------------------------------------------------------------
Özel `.` ve `..` parçalarını kaldırarak bir URL yolunu normalleştirir. Bu metot, gereksiz yol öğelerini web tarayıcılarının yaptığı gibi kaldırır.

```php
Url::removeDotSegments('/path/../subtree/./file.txt');  // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar');                // '/foo/bar'
Url::removeDotSegments('./today/../file.txt');          // 'file.txt'
```


UrlImmutable
============

[api:Nette\Http\UrlImmutable] sınıfı, [#Url] sınıfının değişmez alternatifidir (PHP'de `DateTimeImmutable` sınıfının `DateTime` sınıfının değişmez alternatifi olmasına benzer). Setter yerine "wither"ları vardır; bunlar nesneyi değiştirmez, değiştirilmiş değere sahip yeni örnekler döndürür:

```php
use Nette\Http\UrlImmutable;

$url = new UrlImmutable(
	'https://nette.org:8080/en/download?name=param#footer',
);

$newUrl = $url
	->withHost('example.com')
	->withPath('/en/')
	->withQueryParameter('name', 'value');

echo $newUrl; // 'https://example.com:8080/en/?name=value#footer'
```

`UrlImmutable` sınıfı `JsonSerializable` arayüzünü uygular ve bir `__toString()` metodu vardır; dolayısıyla nesne yazdırılabilir ya da `json_encode()` fonksiyonuna verilen veride kullanılabilir.

```php
echo $url;
echo json_encode([$url]);
```


URL Bileşenleri
---------------

Tek tek URL bileşenlerini almak ya da değiştirmek için şu metotlar kullanılabilir:

.[language-php]
| Wither									| Getter						| 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` 	| URL'nin tamamı

`getUser()`, `getPassword()`, `withUser()`, `withPassword()` ve `withoutUserInfo()` metotları kullanımdan kaldırıldı; çünkü kimlik bilgilerini doğrudan URL'ye gömmek önerilmez.

Tek tek sorgu parametreleriyle de şunları kullanarak çalışabiliriz:

.[language-php]
| Wither								| Getter
|-----------------------------------------------
| `withQuery(string\|array $query)` 	    | `getQueryParameters(): array`
| `withQueryParameter(string $name, $val)`  | `getQueryParameter(string $name)`


getDomain(int $level = 2): string .[method]
-------------------------------------------
Host'un sağ ya da sol parçasını döndürür. Host `www.nette.org` ise şöyle çalışır:

.[language-php]
| `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 .[method]{data-version:3.3.2}
----------------------------------------------------------------------
Mutlak bir URL'yi, bir tarayıcının HTML sayfasındaki bağlantıları işlediği şekilde çözer:
- bağlantı mutlak bir URL ise (şema içeriyorsa) değiştirilmeden kullanılır
- bağlantı `//` ile başlıyorsa yalnızca geçerli URL'nin şeması alınır
- bağlantı `/` ile başlıyorsa alan adı kökünden mutlak bir yol oluşturulur
- diğer durumlarda URL, geçerli yola göre kurulur

```php
$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 $url): bool .[method]
----------------------------------------
İki URL'nin özdeş olup olmadığını denetler.

```php
$url->isEqual('https://nette.org');
```


UrlScript
=========

[api:Nette\Http\UrlScript] sınıfı, [#UrlImmutable] sınıfının bir torunudur ve onu projenin kök dizini gibi ek sanal URL bileşenleriyle genişletir. Üst sınıfı gibi o da değişmez bir nesnedir.

Aşağıdaki şema, UrlScript'in tanıdığı bileşenleri gösterir:

/--pre
      baseUrl    basePath  relativePath  relativeUrl
         |          |        |               |
 /---------------/-----\/--------\---------------------------\
 <b>http://nette.org/admin/script.php/pathinfo/?name=param#footer</b>
                 \_______________/\________/
                        |              |
                   scriptPath       pathInfo
\--

- `baseUrl`, uygulamanın temel URL'sidir; alan adını ve uygulamanın kök dizinine giden yol parçasını içerir
- `basePath`, uygulamanın kök dizinine giden yol parçasıdır
- `scriptPath`, geçerli betiğe giden yoldur
- `relativePath`, `basePath` değerine göre betiğin adıdır (ve olasılıkla ek yol parçalarıdır)
- `relativeUrl`, URL'nin `baseUrl` sonrasındaki tüm parçasıdır; sorgu dizesi ve fragment dahil
- `pathInfo`, URL'nin betik adından sonraki, artık ender kullanılan parçasıdır

URL'nin bu parçalarını almak için şu metotlar kullanılabilir:

.[language-php]
| Getter						| Döndürülen değer
|------------------------------------------------
| `getScriptPath(): string`		| `'/admin/script.php'`
| `getBasePath(): string`		| `'/admin/'`
| `getBaseUrl(): string`		| `'http://nette.org/admin/'`
| `getRelativePath(): string`	| `'script.php/pathinfo/'`
| `getRelativeUrl(): string`	| `'script.php/pathinfo/?name=param#footer'`
| `getPathInfo(): string`		| `'/pathinfo/'`

`UrlScript` nesnelerini genellikle doğrudan oluşturmayız; bunun yerine [Nette\Http\Request::getUrl() |request] metodu onu, bileşenleri geçerli HTTP isteği için zaten doğru ayarlanmış olarak döndürür.

URL'lerle Çalışma

Url, UrlImmutable ve UrlScript sınıfları, URL'leri üretmeyi, ayrıştırmayı ve onlarla çalışmayı kolaylaştırır.

Kurulum ve gereksinimler

Url

Nette\Http\Url sınıfı, URL'lerle ve tek tek bileşenleriyle kolayca çalışmaya olanak tanır; şu şemada gösterildiği gibi:

scheme  user  password  host   port    path        query  fragment
  |      |      |        |      |       |            |       |
/--\   /--\ /------\ /-------\ /--\/----------\ /--------\ /----\
http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer
\______\__________________________/
    |               |
 hostUrl        authority

URL üretmek 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'

Bir URL'yi ayrıştırıp sonra onunla çalışabilirsiniz de:

$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 bir __toString() metodu vardır; dolayısıyla nesne yazdırılabilir ya da json_encode() fonksiyonuna verilen veride kullanılabilir.

echo $url;
echo json_encode([$url]);

URL Bileşenleri

Tek tek URL bileşenlerini almak ya da değiştirmek için şu metotlar kullanılabilir:

Setter Getter 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 URL'nin tamamı

getUser(), getPassword(), setUser() ve setPassword() metotları kullanımdan kaldırıldı; çünkü kimlik bilgilerini doğrudan URL'ye gömmek önerilmez.

Uyarı: Bir HTTP isteğinden alınan URL ile çalışırken, tarayıcı fragment'ı sunucuya göndermediği için onun fragment içermeyeceğini unutmayın.

Tek tek sorgu parametreleriyle de şunları kullanarak çalışabiliriz:

Setter Getter
setQuery(string|array $query) getQueryParameters(): array
setQueryParameter(string $name, $val) getQueryParameter(string $name)
`appendQuery(string array $query)`

getDomain(int $level = 2)string

Host'un sağ ya da sol parçasını döndürür. Host www.nette.org ise şöyle ç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 $url)bool

İki URL'nin özdeş olup olmadığını denetler.

$url->isEqual('https://nette.org');

canonicalize()

URL'yi kurallı biçime dönüştürür. Bu, host adını küçük harfe çevirir ve yolu normalleştirir (yüzde kodlaması ve gereksiz karakterlerin kaldırılması). Sorgu dizesi değiştirilmeden bırakılır.

Url::isAbsolute(string $url)bool

Bir URL'nin mutlak olup olmadığını denetler. Bir URL, bir şemayla (örneğin http, https, ftp) ve ardından iki nokta üst üste ile başlıyorsa mutlak sayılır.

Url::isAbsolute('https://nette.org');    // true
Url::isAbsolute('//nette.org');          // false

Url::removeDotSegments(string $path)string

Özel . ve .. parçalarını kaldırarak bir URL yolunu normalleştirir. Bu 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 alternatifidir (PHP'de DateTimeImmutable sınıfının DateTime sınıfının değişmez alternatifi olmasına benzer). Setter yerine "wither"ları vardır; bunlar nesneyi değiştirmez, değiştirilmiş değere sahip yeni örnekler döndürür:

use Nette\Http\UrlImmutable;

$url = new UrlImmutable(
	'https://nette.org:8080/en/download?name=param#footer',
);

$newUrl = $url
	->withHost('example.com')
	->withPath('/en/')
	->withQueryParameter('name', 'value');

echo $newUrl; // 'https://example.com:8080/en/?name=value#footer'

UrlImmutable sınıfı JsonSerializable arayüzünü uygular ve bir __toString() metodu vardır; dolayısıyla nesne yazdırılabilir ya da json_encode() fonksiyonuna verilen veride kullanılabilir.

echo $url;
echo json_encode([$url]);

URL Bileşenleri

Tek tek URL bileşenlerini almak ya da değiştirmek için şu metotlar kullanılabilir:

Wither Getter 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 URL'nin tamamı

getUser(), getPassword(), withUser(), withPassword() ve withoutUserInfo() metotları kullanımdan kaldırıldı; çünkü kimlik bilgilerini doğrudan URL'ye gömmek önerilmez.

Tek tek sorgu parametreleriyle de şunları kullanarak çalışabiliriz:

Wither Getter
withQuery(string|array $query) getQueryParameters(): array
withQueryParameter(string $name, $val) getQueryParameter(string $name)

getDomain(int $level = 2)string

Host'un sağ ya da sol parçasını döndürür. Host www.nette.org ise şöyle ç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 çözer:

  • bağlantı mutlak bir URL ise (şema içeriyorsa) değiştirilmeden kullanılır
  • bağlantı // ile başlıyorsa yalnızca geçerli URL'nin şeması alınır
  • bağlantı / ile başlıyorsa alan adı kökünden mutlak bir yol oluşturulur
  • diğer durumlarda URL, geçerli yola göre kurulur
$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 $url)bool

İki URL'nin özdeş olup olmadığını denetler.

$url->isEqual('https://nette.org');

UrlScript

Nette\Http\UrlScript sınıfı, UrlImmutable sınıfının bir torunudur ve onu projenin kök dizini gibi ek sanal URL bileşenleriyle genişletir. Üst sınıfı gibi o da değişmez bir nesnedir.

Aşağıdaki şema, 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, uygulamanın temel URL'sidir; alan adını ve uygulamanın kök dizinine giden yol parçasını içerir
  • basePath, uygulamanın kök dizinine giden yol parçasıdır
  • scriptPath, geçerli betiğe giden yoldur
  • relativePath, basePath değerine göre betiğin adıdır (ve olasılıkla ek yol parçalarıdır)
  • relativeUrl, URL'nin baseUrl sonrasındaki tüm parçasıdır; sorgu dizesi ve fragment dahil
  • pathInfo, URL'nin betik adından sonraki, artık ender kullanılan parçasıdır

URL'nin bu parçalarını almak için şu metotlar kullanılabilir:

Getter Döndürülen değer
getScriptPath(): string '/admin/script.php'
getBasePath(): string '/admin/'
getBaseUrl(): string 'http://nette.org/admin/'
getRelativePath(): string 'script.php/pathinfo/'
getRelativeUrl(): string 'script.php/pathinfo/?name=param#footer'
getPathInfo(): string '/pathinfo/'

UrlScript nesnelerini genellikle doğrudan oluşturmayız; bunun yerine Nette\Http\Request::getUrl() metodu onu, bileşenleri geçerli HTTP isteği için zaten doğru ayarlanmış olarak döndürür.