Nette Documentation Preview

syntax
Rezepte
*******


Sicherheitsrichtlinien für Inhalte .[#toc-content-security-policy]
==================================================================

Wenn Ihre Website die Content Security Policy verwendet, müssen Sie Folgendes hinzufügen `'nonce-<value>'` und `'strict-dynamic'` zu `script-src` hinzufügen, damit Tracy richtig funktioniert. Einige Plugins von Drittanbietern können zusätzliche Direktiven erfordern.
Nonce wird in der Direktive `style-src` nicht unterstützt. Wenn Sie diese Direktive verwenden, müssen Sie `'unsafe-inline'` hinzufügen, aber dies sollte im Produktionsmodus vermieden werden.

Konfigurationsbeispiel für [Nette Framework |nette:configuring]:

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

Beispiel in reinem PHP:

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


Schnelleres Laden .[#toc-faster-loading]
========================================

Die grundlegende Integration ist einfach, aber wenn Sie langsame blockierende Skripte in der Webseite haben, können diese das Laden des Tracy verlangsamen.
Die Lösung ist, dass Sie `<?php Tracy\Debugger::renderLoader() ?>` in Ihre Vorlage vor den Skripten einzufügen:

```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 und umgeleitete Anfragen .[#toc-ajax-and-redirected-requests]
==================================================================

Tracy kann Debug-Balken und Bluescreens für AJAX-Anfragen und Redirects anzeigen. Tracy erstellt seine eigenen Sitzungen, speichert Daten in seinen eigenen temporären Dateien und verwendet ein `tracy-session` Cookie.

Tracy kann auch so konfiguriert werden, dass es eine native PHP-Sitzung verwendet, die gestartet wird, bevor Tracy eingeschaltet wird:

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

Falls das Starten einer Sitzung eine komplexere Initialisierung erfordert, können Sie Tracy sofort starten (so dass es mit auftretenden Fehlern umgehen kann), dann den Sitzungshandler initialisieren und schließlich Tracy über die Funktion `dispatch()` mitteilen, dass die Sitzung zur Verwendung bereit ist:

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

// gefolgt von der Sitzungsinitialisierung
// und starten Sie die Sitzung
session_start();

Debugger::dispatch();
```

Die Funktion `setSessionStorage()` gibt es seit Version 2.9, davor hat Tracy immer die native PHP-Sitzung verwendet.


Benutzerdefinierter Scrubber .[#toc-custom-scrubber]
====================================================

Scrubber ist ein Filter, der verhindert, dass sensible Daten wie Passwörter oder Anmeldedaten aus Dumps durchsickern. Der Filter wird für jedes Element des gedumpten Arrays oder Objekts aufgerufen und gibt `true` zurück, wenn der Wert sensibel ist. In diesem Fall wird `*****` anstelle des Wertes ausgegeben.

```php
// vermeidet das Dumping von Schlüsselwerten und Eigenschaften wie `Passwort`,
// Passwort_Wiederholung", "Passwort_Prüfung", "Datenbank-Passwort", usw.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// wir verwenden es für alle Dumps innerhalb von BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
```


Benutzerdefinierter Logger .[#toc-custom-logger]
================================================

Wir können einen benutzerdefinierten Logger erstellen, der Fehler und nicht abgefangene Ausnahmen protokolliert und auch von `Tracy\Debugger::log()` aufgerufen werden kann. Logger implementiert die Schnittstelle [api:Tracy\ILogger].

```php
use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// sendet eine Anfrage an Slack
	}
}
```

Und dann aktivieren wir ihn:

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

Wenn wir das vollständige Nette Framework verwenden, können wir es in der NEON-Konfigurationsdatei einstellen:

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


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

Das Tracy-Paket bietet einen PSR-3-Adapter, der die Integration von [monolog/monolog](https://github.com/Seldaek/monolog) ermöglicht.

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


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

Wenn Tracy unter nginx nicht funktioniert, ist es wahrscheinlich falsch konfiguriert. Wenn es etwas gibt wie

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

ändern Sie es in

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

Rezepte

Sicherheitsrichtlinien für Inhalte

Wenn Ihre Website die Content Security Policy verwendet, müssen Sie Folgendes hinzufügen 'nonce-<value>' und 'strict-dynamic' zu script-src hinzufügen, damit Tracy richtig funktioniert. Einige Plugins von Drittanbietern können zusätzliche Direktiven erfordern. Nonce wird in der Direktive style-src nicht unterstützt. Wenn Sie diese Direktive verwenden, müssen Sie 'unsafe-inline' hinzufügen, aber dies sollte im Produktionsmodus vermieden werden.

Konfigurationsbeispiel für Nette Framework:

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

Beispiel in reinem PHP:

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

Schnelleres Laden

Die grundlegende Integration ist einfach, aber wenn Sie langsame blockierende Skripte in der Webseite haben, können diese das Laden des Tracy verlangsamen. Die Lösung ist, dass Sie <?php Tracy\Debugger::renderLoader() ?> in Ihre Vorlage vor den Skripten einzufügen:

<!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 und umgeleitete Anfragen

Tracy kann Debug-Balken und Bluescreens für AJAX-Anfragen und Redirects anzeigen. Tracy erstellt seine eigenen Sitzungen, speichert Daten in seinen eigenen temporären Dateien und verwendet ein tracy-session Cookie.

Tracy kann auch so konfiguriert werden, dass es eine native PHP-Sitzung verwendet, die gestartet wird, bevor Tracy eingeschaltet wird:

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

Falls das Starten einer Sitzung eine komplexere Initialisierung erfordert, können Sie Tracy sofort starten (so dass es mit auftretenden Fehlern umgehen kann), dann den Sitzungshandler initialisieren und schließlich Tracy über die Funktion dispatch() mitteilen, dass die Sitzung zur Verwendung bereit ist:

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

// gefolgt von der Sitzungsinitialisierung
// und starten Sie die Sitzung
session_start();

Debugger::dispatch();

Die Funktion setSessionStorage() gibt es seit Version 2.9, davor hat Tracy immer die native PHP-Sitzung verwendet.

Benutzerdefinierter Scrubber

Scrubber ist ein Filter, der verhindert, dass sensible Daten wie Passwörter oder Anmeldedaten aus Dumps durchsickern. Der Filter wird für jedes Element des gedumpten Arrays oder Objekts aufgerufen und gibt true zurück, wenn der Wert sensibel ist. In diesem Fall wird ***** anstelle des Wertes ausgegeben.

// vermeidet das Dumping von Schlüsselwerten und Eigenschaften wie `Passwort`,
// Passwort_Wiederholung", "Passwort_Prüfung", "Datenbank-Passwort", usw.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// wir verwenden es für alle Dumps innerhalb von BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

Benutzerdefinierter Logger

Wir können einen benutzerdefinierten Logger erstellen, der Fehler und nicht abgefangene Ausnahmen protokolliert und auch von Tracy\Debugger::log() aufgerufen werden kann. Logger implementiert die Schnittstelle Tracy\ILogger.

use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// sendet eine Anfrage an Slack
	}
}

Und dann aktivieren wir ihn:

Tracy\Debugger::setLogger(new SlackLogger);

Wenn wir das vollständige Nette Framework verwenden, können wir es in der NEON-Konfigurationsdatei einstellen:

services:
	tracy.logger: SlackLogger

Monolog-Integration

Das Tracy-Paket bietet einen PSR-3-Adapter, der die Integration von monolog/monolog ermöglicht.

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

nginx

Wenn Tracy unter nginx nicht funktioniert, ist es wahrscheinlich falsch konfiguriert. Wenn es etwas gibt wie

try_files $uri $uri/ /index.php;

ändern Sie es in

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