Nette Documentation Preview

syntax
Recepti
*******


Politika varnosti vsebine .[#toc-content-security-policy]
=========================================================

Če vaše spletno mesto uporablja politiko za varnost vsebine, morate dodati `'nonce-<value>'` in `'strict-dynamic'` na `script-src`, da bo Tracy pravilno deloval. Nekateri tretji vtičniki lahko zahtevajo dodatne direktive.
Nonce ni podprt v direktivi `style-src`, če uporabljate to direktivo, morate dodati `'unsafe-inline'`, vendar se temu v produkcijskem načinu izognite.

Primer konfiguracije za [ogrodje Nette |nette:configuring]:

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

Primer v čistem jeziku PHP:

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


Hitrejše nalaganje .[#toc-faster-loading]
=========================================

Osnovna integracija je preprosta, vendar če imate na spletni strani skripte za počasno blokiranje, lahko upočasnijo nalaganje Tracyja.
Rešitev je, da postavite `<?php Tracy\Debugger::renderLoader() ?>` v predlogo pred vsemi skriptami:

```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 in preusmerjeni zahtevki .[#toc-ajax-and-redirected-requests]
==================================================================

Tracy lahko prikaže Debug bar in Bluescreens za zahteve AJAX in preusmeritve. Tracy ustvarja lastne seje, shranjuje podatke v lastne začasne datoteke in uporablja piškotek `tracy-session`.

Tracy je mogoče konfigurirati tudi za uporabo izvorne seje PHP, ki se zažene, preden je Tracy vklopljen:

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

Če je za zagon seje potrebna bolj zapletena inicializacija, lahko Tracy zaženete takoj (tako da lahko obravnava morebitne napake), nato pa inicializirate izvajalca seje in nazadnje obvestite Tracy, da je seja pripravljena za uporabo, s funkcijo `dispatch()`:

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

// ki mu sledi inicializacija seje
// in zaženite sejo.
session_start();

Debugger::dispatch();
```

Funkcija `setSessionStorage()` obstaja od različice 2.9, pred tem je Tracy vedno uporabljal izvorno sejo PHP.


Čistilec po meri .[#toc-custom-scrubber]
========================================

Scrubber je filter, ki preprečuje uhajanje občutljivih podatkov, kot so gesla ali poverilnice, iz odlagališč. Filter se pokliče za vsak element izpisanega polja ali predmeta in vrne `true`, če je vrednost občutljiva. V tem primeru se namesto vrednosti izpiše `*****`.

```php
// se izogne odmetavanju vrednosti ključev in lastnosti, kot je `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD` itd.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// uporabljamo ga za vsa odlagališča znotraj sistema BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
```


Dnevnik po meri .[#toc-custom-logger]
=====================================

Ustvarimo lahko dnevnik po meri, ki beleži napake, nezajete izjeme in ga lahko pokliče tudi `Tracy\Debugger::log()`. Logger implementira vmesnik [api:Tracy\ILogger].

```php
use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// pošlje zahtevo v storitev Slack
	}
}
```

Nato ga aktiviramo:

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

Če uporabljamo celotno ogrodje Nette, ga lahko nastavimo v konfiguracijski datoteki NEON:

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


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

Paket Tracy zagotavlja adapter PSR-3, ki omogoča integracijo [monolog/monolog](https://github.com/Seldaek/monolog).

```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'); // zapiše: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // zapiše: [<TIMESTAMP>] main-channel.WARNING: opozorilo [] []
```


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

Če Tracy ne deluje v nginxu, je verjetno napačno konfiguriran. Če je na voljo nekaj takega kot

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

spremenite v

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

Recepti

Politika varnosti vsebine

Če vaše spletno mesto uporablja politiko za varnost vsebine, morate dodati 'nonce-<value>' in 'strict-dynamic' na script-src, da bo Tracy pravilno deloval. Nekateri tretji vtičniki lahko zahtevajo dodatne direktive. Nonce ni podprt v direktivi style-src, če uporabljate to direktivo, morate dodati 'unsafe-inline', vendar se temu v produkcijskem načinu izognite.

Primer konfiguracije za ogrodje Nette:

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

Primer v čistem jeziku PHP:

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

Hitrejše nalaganje

Osnovna integracija je preprosta, vendar če imate na spletni strani skripte za počasno blokiranje, lahko upočasnijo nalaganje Tracyja. Rešitev je, da postavite <?php Tracy\Debugger::renderLoader() ?> v predlogo pred vsemi skriptami:

<!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 in preusmerjeni zahtevki

Tracy lahko prikaže Debug bar in Bluescreens za zahteve AJAX in preusmeritve. Tracy ustvarja lastne seje, shranjuje podatke v lastne začasne datoteke in uporablja piškotek tracy-session.

Tracy je mogoče konfigurirati tudi za uporabo izvorne seje PHP, ki se zažene, preden je Tracy vklopljen:

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

Če je za zagon seje potrebna bolj zapletena inicializacija, lahko Tracy zaženete takoj (tako da lahko obravnava morebitne napake), nato pa inicializirate izvajalca seje in nazadnje obvestite Tracy, da je seja pripravljena za uporabo, s funkcijo dispatch():

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

// ki mu sledi inicializacija seje
// in zaženite sejo.
session_start();

Debugger::dispatch();

Funkcija setSessionStorage() obstaja od različice 2.9, pred tem je Tracy vedno uporabljal izvorno sejo PHP.

Čistilec po meri

Scrubber je filter, ki preprečuje uhajanje občutljivih podatkov, kot so gesla ali poverilnice, iz odlagališč. Filter se pokliče za vsak element izpisanega polja ali predmeta in vrne true, če je vrednost občutljiva. V tem primeru se namesto vrednosti izpiše *****.

// se izogne odmetavanju vrednosti ključev in lastnosti, kot je `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD` itd.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// uporabljamo ga za vsa odlagališča znotraj sistema BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

Dnevnik po meri

Ustvarimo lahko dnevnik po meri, ki beleži napake, nezajete izjeme in ga lahko pokliče tudi Tracy\Debugger::log(). Logger implementira vmesnik Tracy\ILogger.

use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// pošlje zahtevo v storitev Slack
	}
}

Nato ga aktiviramo:

Tracy\Debugger::setLogger(new SlackLogger);

Če uporabljamo celotno ogrodje Nette, ga lahko nastavimo v konfiguracijski datoteki NEON:

services:
	tracy.logger: SlackLogger

Monolog Integracija

Paket Tracy zagotavlja adapter PSR-3, ki omogoča integracijo monolog/monolog.

$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'); // zapiše: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // zapiše: [<TIMESTAMP>] main-channel.WARNING: opozorilo [] []

nginx

Če Tracy ne deluje v nginxu, je verjetno napačno konfiguriran. Če je na voljo nekaj takega kot

try_files $uri $uri/ /index.php;

spremenite v

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