> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Paket-Diagnoseinformationen zu about hinzufügen

> Erfahren Sie, wie Sie mit dem AboutCommand von Laravel 13 den Konfigurationszustand Ihres Pakets in CLI und JSON anzeigen, und was bei Auswertungszeitpunkt und langfristiger Wartung zu beachten ist.

Wenn Nutzer sich mit einer Anfrage an Sie wenden, möchten Sie in einheitlicher Form prüfen können, ob Ihr Paket aktiviert ist und welcher Treiber ausgewählt ist. Mit `AboutCommand::add()` fügen Sie der Ausgabe von `php artisan about` einen Abschnitt für Ihr Paket hinzu, ohne einen eigenen Befehl zu implementieren.

Die offizielle Dokumentation enthält ein grundlegendes Registrierungsbeispiel. Diese Seite betrachtet zusätzlich die Implementierung in Laravel 13 und geht auf den Zeitpunkt der Datenerfassung, die JSON-Typen, Kollisionen von Abschnittsnamen und den Registrierungszustand in Tests ein.

## Angezeigte Inhalte im Provider registrieren

Das folgende Beispiel setzt voraus, dass `courier.enabled` und `courier.driver` bereits als Paketkonfiguration registriert sind. Wie Sie Konfiguration registrieren, erfahren Sie unter [Paketkonfiguration zusammenführen und cachen](/de/advanced/package-config-merging).

```php theme={null}
<?php

namespace Acme\Courier;

use Illuminate\Foundation\Console\AboutCommand;
use Illuminate\Support\ServiceProvider;

class CourierServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        if (! $this->app->runningInConsole()) {
            return;
        }

        AboutCommand::add('Acme Courier', fn () => [
            'Enabled' => AboutCommand::format(
                (bool) config('courier.enabled', false),
                console: fn (bool $enabled) => $enabled ? 'ENABLED' : 'OFF',
            ),
            'Driver' => (string) config('courier.driver', 'log'),
        ]);
    }
}
```

`runningInConsole()` ist eine Bedingung, die unnötige Registrierungen bei HTTP-Requests vermeidet. Sie erkennt nicht nur die Ausführung von `about`, die Registrierung erfolgt also auch bei anderen Artisan-Befehlen. Die Konfigurationsabfragen innerhalb der obigen Closure werden zum Zeitpunkt der Registrierung jedoch nicht ausgeführt.

<Warning>
  Wählen Sie die angezeigten Einträge explizit aus. Geben Sie keine API-Schlüssel, Zugriffstoken, Verbindungs-URLs mit Zugangsdaten oder ganze Konfigurationsarrays aus. Auch die JSON-Ausgabe maskiert Geheimnisse nicht automatisch. Bitten Sie Nutzer bei Anfragen, nur den Abschnitt Ihres Pakets zu teilen und dessen Inhalt vor dem Teilen zu prüfen.
</Warning>

## Registrierung und Auswertung zeitlich getrennt betrachten

In Laravel `v13.35.0` erfasst `add()` die Daten nicht sofort, sondern fügt dem statischen `$customDataResolvers` eine Registrierungs-Closure hinzu. Bei der Ausführung von `about` werden die Anzeigedaten zusammengestellt und die registrierten Closures zum Abrufen der Daten ausgewertet.

```mermaid theme={null}
flowchart TD
    A["boot() des Providers"] --> B["add() speichert die Registrierung"]
    B --> C["about ausführen"]
    C --> D["Standardinformationen und zusätzliche Abschnitte erfassen"]
    D --> E["Closures zum Datenabruf auswerten"]
    E --> F["Abschnitte mit --only filtern"]
    F --> G["Als CLI oder JSON anzeigen"]
```

Wenn Sie Konfigurationswerte innerhalb der Closure abrufen, statt sie vorab außerhalb von `add()` zu lesen und in einem Array festzuschreiben, spiegelt die Ausgabe den Zustand zum Zeitpunkt der Befehlsausführung wider. Der Filter `--only` greift dagegen erst **nach** der Auswertung der Closures zum Datenabruf.

```bash theme={null}
php artisan about --only=environment
```

Auch wenn Sie wie hier nur einen Standardabschnitt angeben, wird die obige Closure für `Acme Courier` ausgewertet. Nicht angezeigt zu werden ist etwas anderes als nicht verarbeitet zu werden.

Ermitteln Sie zusätzliche Informationen daher aus Konfigurationswerten oder leichtgewichtigem lokalem Zustand. Verbindungsprüfungen gegen externe APIs, Datenbankabfragen oder das Ändern von Dateien können sogar Befehle verlangsamen oder fehlschlagen lassen, die nur nicht zusammenhängende Abschnitte prüfen. Lagern Sie Verbindungsprüfungen und Reparaturen in eigene Artisan-Befehle aus.

<Tip>
  Die Bedingung `runningInConsole()` allein garantiert nicht, dass `boot()` eines Deferred Service Providers ausgeführt wird. Wenn die Diagnoseinformationen immer registriert werden sollen, legen Sie die Registrierung in einen sofort geladenen Provider. Für Setups, bei denen nur die Service-Bindungen verzögert werden, siehe [Deferred Service Provider](/de/advanced/deferred-provider).
</Tip>

## CLI-Anzeige und JSON-Typen vereinbaren

Um nur die Informationen Ihres Pakets zu prüfen, geben Sie den Abschnittsnamen in kleingeschriebenem Snake Case an. Für `Acme Courier` ist das `acme_courier`.

```bash theme={null}
php artisan about --only=acme_courier
php artisan about --only=environment,acme_courier
php artisan about --only=acme_courier --json
```

Wenn im obigen Registrierungsbeispiel `courier.enabled` den Wert `true` und `courier.driver` den Wert `log` hat, sieht das JSON so aus:

```json theme={null}
{
  "acme_courier": {
    "enabled": true,
    "driver": "log"
  }
}
```

In der CLI wird `Enabled` als `ENABLED` angezeigt. `AboutCommand::format()` ist ein Helfer, mit dem Sie `console` für die CLI und `json` für JSON angeben können. Das obige Beispiel gibt nur `console` an, daher liefert JSON den ursprünglichen booleschen Wert. Die Anzeigezeichenkette der CLI muss nicht in JSON übernommen werden.

| Ziel | Umwandlung und Verarbeitung in der Implementierung |
| - | - |
| Werte von `--only` und Abschnittsnamen | Nach Kleinschreibung in Snake Case umgewandelt und verglichen |
| Abschnittsschlüssel im JSON | Abschnittsname in Snake Case umgewandelt |
| Eintragsschlüssel im JSON | Eintragsname kleingeschrieben und dann in Snake Case umgewandelt |
| Werte von `format()` | In der CLI wird `console`, in JSON `json` verwendet. Ohne Angabe der ursprüngliche Wert |

Wenn Sie wie im Beispiel Namen aus gewöhnlichen englischen Wörtern verwenden, die durch Leerzeichen getrennt sind, lassen sich Filter und JSON-Schlüssel leichter handhaben. Schlüssel, auf die automatisierte Prozesse zugreifen, können sich auch durch eine Änderung des Anzeigenamens ändern. Prüfen Sie daher bei jedem Release die Kompatibilität.

## Abschnitte mit paketspezifischen Namen versehen

`add()` hängt Einträge an denselben Abschnitt an. Die Angabe eines gleichnamigen Abschnitts ersetzt nicht den gesamten zuvor registrierten Inhalt.

Wählen Sie einen Namen wie `Acme Courier`, der sich von anderen Paketen unterscheidet, und ergänzen Sie die Laravel-Standardabschnitte `Environment`, `Cache`, `Drivers` und `Storage` nur, wenn es nötig ist.

Wenn Sie im selben Abschnitt mehrfach einen Eintrag mit demselben Namen registrieren, können in der CLI mehrere Zeilen erhalten bleiben, während JSON sie unter demselben Schlüssel zusammenführt und der spätere Wert erhalten bleibt. Vermeiden Sie außerdem Namen, die zwar unterschiedlich geschrieben sind, nach der Umwandlung in Snake Case aber denselben Schlüssel ergeben. Bündeln Sie die Registrierung an einer Stelle und gestalten Sie die Einträge so, dass sie sowohl in der CLI als auch in JSON eindeutig sind.

## Statischen Registrierungszustand in Tests behandeln

Beim Start von `about` werden die Anzeigedaten `$data` zurückgesetzt, die Registrierungsliste für zusätzliche Informationen `$customDataResolvers` bleibt jedoch erhalten. So können die Informationen jedes Mal aus denselben Registrierungen neu erfasst werden. Wird `boot()` eines Providers im selben PHP-Prozess wiederholt ausgeführt, können sich die Registrierungen jedoch anhäufen.

`AboutCommand::flushState()` ist eine Methode, die **die Registrierungen aller Pakete** sowie die Anzeigedaten löscht. Rufen Sie sie nicht in einem produktiven Provider auf, um Duplikate Ihres eigenen Abschnitts zu vermeiden. Dabei gehen auch die Diagnoseinformationen anderer Pakete verloren.

Wenn Sie die Anwendung in einer eigenen Testinfrastruktur neu aufbauen, legen Sie fest, wer für das Zurücksetzen des Zustands zwischen Tests verantwortlich ist. Falls Sie zurücksetzen, tun Sie dies vor dem Booten der betreffenden Provider und führen Sie danach alle nötigen Registrierungen durch. Prüfen Sie auch, ob Ihre bestehende Testinfrastruktur den Zustand bereits zurücksetzt.

### Prüfpunkte vor dem Release

Prüfen Sie die folgenden Kombinationen mit [Laravel-Pakete mit Orchestra Testbench testen](/de/advanced/package-testing) und in einer echten Anwendung, die Ihr Paket nutzt.

| Zu prüfende Aktion | Erwartetes Ergebnis |
| - | - |
| `about --only=acme_courier` | Nur der Paketabschnitt wird angezeigt, ohne doppelte Einträge |
| `about --only=acme_courier --json` | `enabled` wird als boolescher Wert und `driver` als String geliefert |
| `about --only=environment` | Die Erfassung der Paketinformationen verursacht keine externe Kommunikation oder Seiteneffekte, und der Befehl endet normal |
| Aktivierung oder Treiber ändern | Angezeigte Werte und JSON-Werte entsprechen der Konfiguration zum Zeitpunkt der Befehlsausführung |
| Zweimal in derselben Anwendung ausführen | Einträge häufen sich nicht an, und die Informationen werden bei jeder Ausführung neu erfasst |
| Anwendung im selben PHP-Prozess neu aufbauen | Der Registrierungszustand sickert nicht zwischen Tests durch, und Informationen anderer Pakete gehen nicht verloren |
| Mit vorhandenem Konfigurations-Cache | Angezeigt werden die tatsächlich von der Anwendung verwendeten Konfigurationswerte, nicht der Inhalt der veröffentlichten Konfigurationsdatei |

## Verwandte Seiten

<Columns cols={2}>
  <Card title="Laravel-Paketentwicklung" icon="box" href="/de/advanced/package-development">
    Grundlagen zu Providern und der Registrierung von Ressourcen.
  </Card>

  <Card title="Paketkonfiguration zusammenführen und cachen" icon="sliders" href="/de/advanced/package-config-merging">
    Zusammenspiel von Standardwerten, Überschreibungen durch Nutzer und Konfigurations-Cache.
  </Card>
</Columns>

## Herangezogene Primärquellen

* [Offizielle Laravel-Dokumentation: Informationen aus Paketen zu about hinzufügen](https://github.com/laravel/docs/blob/13.x/packages.md#about-artisan-command)
* [Offizielle Laravel-Dokumentation: about und --only](https://github.com/laravel/docs/blob/13.x/configuration.md#the-about-command)
* [Laravel Framework v13.35.0: AboutCommand](https://github.com/laravel/framework/blob/v13.35.0/src/Illuminate/Foundation/Console/AboutCommand.php): Registrierung, Auswertungsreihenfolge, Schlüsselumwandlung, `format()` und `flushState()`.
* [Laravel Framework v13.35.0: Tests für format](https://github.com/laravel/framework/blob/v13.35.0/tests/Foundation/Console/AboutCommandTest.php)
* [Laravel Framework v13.35.0: Integrationstests für die JSON-Ausgabe](https://github.com/laravel/framework/blob/v13.35.0/tests/Integration/Foundation/Console/AboutCommandTest.php)


## Related topics

- [Laravel-Paketentwicklung](/de/advanced/package-development.md)
- [Migrations-Guide von laravel/ui zu Fortify](/de/blog/ui-to-fortify.md)
- [Paket-Migrationen veröffentlichen und aktualisieren](/de/advanced/package-migrations.md)
- [Detailerklärung zu Score und Note - VOICEVOX für Laravel](/de/packages/laravel-voicevox/song-score-note.md)
- [Socialite für Discord](/de/packages/socialite-discord.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.