Nette Documentation Preview

syntax
Yemek Tarifleri
***************


İçerik Güvenliği Politikası .[#toc-content-security-policy]
===========================================================

Siteniz İçerik Güvenliği İlkesi kullanıyorsa, şunları eklemeniz gerekir `'nonce-<value>'` ve Tracy'nin düzgün çalışması için `'strict-dynamic'` adresinden `script-src` adresine gidin. Bazı 3. eklentiler ek yönergeler gerektirebilir.
Nonce, `style-src` yönergesinde desteklenmez, bu yönergeyi kullanırsanız `'unsafe-inline'` eklemeniz gerekir, ancak üretim modunda bundan kaçınılmalıdır.

[Nette Framework |nette:configuring] için yapılandırma örneği:

```neon
http:
	csp:
		script-src: [nonce, strict-dynamic]
```

Saf PHP'de örnek:

```php
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
```


Daha Hızlı Yükleme .[#toc-faster-loading]
=========================================

Temel entegrasyon basittir, ancak web sayfasında yavaş engelleyen komut dosyalarınız varsa, Tracy'nin yüklenmesini yavaşlatabilirler.
Çözüm yerleştirmektir `<?php Tracy\Debugger::renderLoader() ?>` herhangi bir komut dosyasından önce şablonunuza yerleştirin:

```latte
<!DOCTYPE html>
<html>
<head>
	<title>...<title>
	<?php Tracy\Debugger::renderLoader() ?>
	<link rel="stylesheet" href="assets/style.css">
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
```


AJAX İsteklerinde Hata Ayıklama .[#toc-debugging-ajax-requests]
===============================================================

Tracy, jQuery veya yerel `fetch` API kullanılarak yapılan AJAX isteklerini otomatik olarak yakalar. Bu istekler Tracy çubuğunda ek satırlar olarak görüntülenerek kolay ve kullanışlı AJAX hata ayıklama olanağı sağlar.

AJAX isteklerini otomatik olarak yakalamak istemiyorsanız, JavaScript değişkenini ayarlayarak bu özelliği devre dışı bırakabilirsiniz:

```js
window.TracyAutoRefresh = false;
```

Belirli AJAX isteklerinin manuel olarak izlenmesi için, `Tracy.getAjaxHeader()` tarafından döndürülen değerle `X-Tracy-Ajax` HTTP başlığını ekleyin. `fetch` işleviyle birlikte kullanımına ilişkin bir örnek aşağıda verilmiştir:

```js
fetch(url, {
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'X-Tracy-Ajax': Tracy.getAjaxHeader(),
    }
})
```

Bu yaklaşım, AJAX isteklerinin seçici olarak hata ayıklamasına olanak tanır.


Veri Depolama .[#toc-data-storage]
==================================

Tracy, AJAX istekleri ve yönlendirmeleri için Tracy çubuk panellerini ve Bluescreens'i görüntüleyebilir. Tracy kendi oturumlarını oluşturur, verileri kendi geçici dosyalarında saklar ve bir `tracy-session` çerezi kullanır.

Tracy, Tracy açılmadan önce başlatılan yerel bir PHP oturumu kullanacak şekilde de yapılandırılabilir:

```php
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
```

Bir oturumun başlatılması daha karmaşık bir başlatma gerektiriyorsa, Tracy'yi hemen başlatabilir (böylece meydana gelen hataları ele alabilir) ve ardından oturum işleyicisini başlatabilir ve son olarak Tracy'ye `dispatch()` işlevini kullanarak oturumun kullanıma hazır olduğunu bildirebilirsiniz:

```php
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

// ardından oturum başlatma
// ve oturumu başlatın
session_start();

Debugger::dispatch();
```

`setSessionStorage()` işlevi 2.9 sürümünden beri mevcuttur, bundan önce Tracy her zaman yerel PHP oturumunu kullanmıştır.


Özel Yıkayıcı .[#toc-custom-scrubber]
=====================================

Scrubber, parolalar veya kimlik bilgileri gibi hassas verilerin dökümlerden sızmasını önleyen bir filtredir. Filtre, dökülen dizi veya nesnenin her öğesi için çağrılır ve değer hassas ise `true` döndürür. Bu durumda, değer yerine `*****` yazdırılır.

```php
// anahtar değerlerinin ve `password` gibi özelliklerin dökülmesini önler,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD`, vb.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// BlueScreen içindeki tüm dökümler için kullanırız
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
```


Özel Kaydedici .[#toc-custom-logger]
====================================

Hataları, yakalanmamış istisnaları günlüğe kaydetmek ve `Tracy\Debugger::log()` tarafından çağrılmak üzere özel bir logger oluşturabiliriz. Logger, [api:Tracy\ILogger] arayüzünü uygular.

```php
use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// Slack'e bir istek gönderir
	}
}
```

Ve sonra onu etkinleştiririz:

```php
Tracy\Debugger::setLogger(new SlackLogger);
```

Eğer Nette Framework'ün tamamını kullanırsak, bunu NEON yapılandırma dosyasında ayarlayabiliriz:

```neon
services:
	tracy.logger: SlackLogger
```


Monolog Entegrasyonu .[#toc-monolog-integration]
------------------------------------------------

Tracy paketi, [monolog/monolog](https://github.com/Seldaek/monolog) entegrasyonuna izin veren bir PSR-3 adaptörü sağlar.

```php
$monolog = new Monolog\Logger('main-channel');
$monolog->pushHandler(new Monolog\Handler\StreamHandler($logFilePath, Monolog\Logger::DEBUG));

$tracyLogger = new Tracy\Bridges\Psr\PsrToTracyLoggerAdapter($monolog);
Debugger::setLogger($tracyLogger);
Debugger::enable();

Debugger::log('info'); // yazıyor: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // yazıyor: [<TIMESTAMP>] main-channel.WARNING: uyarı [] []
```


nginx .[#toc-nginx]
===================

Eğer Tracy nginx üzerinde çalışmıyorsa, muhtemelen yanlış yapılandırılmıştır. Eğer şöyle bir şey varsa

```nginx
try_files $uri $uri/ /index.php;
```

olarak değiştirin

```nginx
try_files $uri $uri/ /index.php$is_args$args;
```

Yemek Tarifleri

İçerik Güvenliği Politikası

Siteniz İçerik Güvenliği İlkesi kullanıyorsa, şunları eklemeniz gerekir 'nonce-<value>' ve Tracy'nin düzgün çalışması için 'strict-dynamic' adresinden script-src adresine gidin. Bazı 3. eklentiler ek yönergeler gerektirebilir. Nonce, style-src yönergesinde desteklenmez, bu yönergeyi kullanırsanız 'unsafe-inline' eklemeniz gerekir, ancak üretim modunda bundan kaçınılmalıdır.

Nette Framework için yapılandırma örneği:

http:
	csp:
		script-src: [nonce, strict-dynamic]

Saf PHP'de örnek:

$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");

Daha Hızlı Yükleme

Temel entegrasyon basittir, ancak web sayfasında yavaş engelleyen komut dosyalarınız varsa, Tracy'nin yüklenmesini yavaşlatabilirler. Çözüm yerleştirmektir <?php Tracy\Debugger::renderLoader() ?> herhangi bir komut dosyasından önce şablonunuza yerleştirin:

<!DOCTYPE html>
<html>
<head>
	<title>...<title>
	<?php Tracy\Debugger::renderLoader() ?>
	<link rel="stylesheet" href="assets/style.css">
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>

AJAX İsteklerinde Hata Ayıklama

Tracy, jQuery veya yerel fetch API kullanılarak yapılan AJAX isteklerini otomatik olarak yakalar. Bu istekler Tracy çubuğunda ek satırlar olarak görüntülenerek kolay ve kullanışlı AJAX hata ayıklama olanağı sağlar.

AJAX isteklerini otomatik olarak yakalamak istemiyorsanız, JavaScript değişkenini ayarlayarak bu özelliği devre dışı bırakabilirsiniz:

window.TracyAutoRefresh = false;

Belirli AJAX isteklerinin manuel olarak izlenmesi için, Tracy.getAjaxHeader() tarafından döndürülen değerle X-Tracy-Ajax HTTP başlığını ekleyin. fetch işleviyle birlikte kullanımına ilişkin bir örnek aşağıda verilmiştir:

fetch(url, {
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'X-Tracy-Ajax': Tracy.getAjaxHeader(),
    }
})

Bu yaklaşım, AJAX isteklerinin seçici olarak hata ayıklamasına olanak tanır.

Veri Depolama

Tracy, AJAX istekleri ve yönlendirmeleri için Tracy çubuk panellerini ve Bluescreens'i görüntüleyebilir. Tracy kendi oturumlarını oluşturur, verileri kendi geçici dosyalarında saklar ve bir tracy-session çerezi kullanır.

Tracy, Tracy açılmadan önce başlatılan yerel bir PHP oturumu kullanacak şekilde de yapılandırılabilir:

session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

Bir oturumun başlatılması daha karmaşık bir başlatma gerektiriyorsa, Tracy'yi hemen başlatabilir (böylece meydana gelen hataları ele alabilir) ve ardından oturum işleyicisini başlatabilir ve son olarak Tracy'ye dispatch() işlevini kullanarak oturumun kullanıma hazır olduğunu bildirebilirsiniz:

Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

// ardından oturum başlatma
// ve oturumu başlatın
session_start();

Debugger::dispatch();

setSessionStorage() işlevi 2.9 sürümünden beri mevcuttur, bundan önce Tracy her zaman yerel PHP oturumunu kullanmıştır.

Özel Yıkayıcı

Scrubber, parolalar veya kimlik bilgileri gibi hassas verilerin dökümlerden sızmasını önleyen bir filtredir. Filtre, dökülen dizi veya nesnenin her öğesi için çağrılır ve değer hassas ise true döndürür. Bu durumda, değer yerine ***** yazdırılır.

// anahtar değerlerinin ve `password` gibi özelliklerin dökülmesini önler,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD`, vb.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// BlueScreen içindeki tüm dökümler için kullanırız
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

Özel Kaydedici

Hataları, yakalanmamış istisnaları günlüğe kaydetmek ve Tracy\Debugger::log() tarafından çağrılmak üzere özel bir logger oluşturabiliriz. Logger, Tracy\ILogger arayüzünü uygular.

use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// Slack'e bir istek gönderir
	}
}

Ve sonra onu etkinleştiririz:

Tracy\Debugger::setLogger(new SlackLogger);

Eğer Nette Framework'ün tamamını kullanırsak, bunu NEON yapılandırma dosyasında ayarlayabiliriz:

services:
	tracy.logger: SlackLogger

Monolog Entegrasyonu

Tracy paketi, monolog/monolog entegrasyonuna izin veren bir PSR-3 adaptörü sağlar.

$monolog = new Monolog\Logger('main-channel');
$monolog->pushHandler(new Monolog\Handler\StreamHandler($logFilePath, Monolog\Logger::DEBUG));

$tracyLogger = new Tracy\Bridges\Psr\PsrToTracyLoggerAdapter($monolog);
Debugger::setLogger($tracyLogger);
Debugger::enable();

Debugger::log('info'); // yazıyor: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // yazıyor: [<TIMESTAMP>] main-channel.WARNING: uyarı [] []

nginx

Eğer Tracy nginx üzerinde çalışmıyorsa, muhtemelen yanlış yapılandırılmıştır. Eğer şöyle bir şey varsa

try_files $uri $uri/ /index.php;

olarak değiştirin

try_files $uri $uri/ /index.php$is_args$args;