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

# Diagnostische package-informatie toevoegen aan about

> Hoe je met AboutCommand in Laravel 13 de configuratiestatus van je package in de CLI en als JSON toont, plus het moment van evaluatie en aandachtspunten voor onderhoud op lange termijn.

Als een gebruiker contact met je opneemt, wil je in een vast formaat kunnen controleren of het package is in- of uitgeschakeld en welke driver is geselecteerd. Met `AboutCommand::add()` voeg je een sectie voor je package toe aan de uitvoer van `php artisan about`, zonder een apart command te implementeren.

De officiële documentatie bevat een basisvoorbeeld van de registratie. Deze pagina bekijkt ook de implementatie van Laravel 13 en gaat dieper in op het moment waarop informatie wordt verzameld, de JSON-types, botsende sectienamen en de registratiestatus in tests.

## De getoonde inhoud registreren in de provider

Het volgende voorbeeld gaat ervan uit dat `courier.enabled` en `courier.driver` al als packageconfiguratie zijn geregistreerd. Hoe je configuratie registreert, lees je in [Packageconfiguratie samenvoegen en cachen](/nl/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()` is een voorwaarde die onnodige registratie bij HTTP-requests voorkomt. Het is geen voorwaarde die alleen de uitvoering van `about` detecteert: de registratie vindt ook plaats bij andere Artisan-commands. Het ophalen van de configuratie binnen de closure hierboven wordt echter niet uitgevoerd op het moment van registratie.

<Warning>
  Kies expliciet welke items je toont. Geef geen API-sleutels, toegangstokens, verbindings-URL's met inloggegevens of volledige configuratie-arrays weer. Ook de JSON-uitvoer maskeert geheime informatie niet automatisch. Vraag gebruikers bij een supportvraag om alleen de sectie van het package te delen en de inhoud vóór het delen te controleren.
</Warning>

## Registratie en evaluatie als aparte momenten zien

In Laravel `v13.35.0` verzamelt `add()` de gegevens niet direct, maar voegt een registratieclosure toe aan de statische `$customDataResolvers`. Bij het uitvoeren van `about` worden de weer te geven gegevens samengesteld en worden de geregistreerde closures voor het ophalen van gegevens geëvalueerd.

```mermaid theme={null}
flowchart TD
    A["boot() van de provider"] --> B["add() slaat de registratie op"]
    B --> C["about uitvoeren"]
    C --> D["Standaardinformatie en toegevoegde secties verzamelen"]
    D --> E["Closures voor het ophalen van gegevens evalueren"]
    E --> F["Secties filteren met --only"]
    F --> G["Weergeven in CLI of als JSON"]
```

Door configuratiewaarden binnen de closure op te halen, weerspiegel je de status op het moment dat het command wordt uitgevoerd, in plaats van ze vooraf buiten `add()` in te lezen en in een array vast te leggen. Het filter `--only` wordt daarentegen pas **na** de evaluatie van de closures voor het ophalen van gegevens toegepast.

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

Ook als je zoals hier alleen een standaardsectie opgeeft, wordt de closure van `Acme Courier` hierboven geëvalueerd. Niet getoond worden is iets anders dan niet uitgevoerd worden.

Haal toegevoegde informatie daarom uit configuratiewaarden of lichte lokale status. Als je er connectiviteitscontroles naar externe API's, databasequery's of het herschrijven van bestanden in stopt, kan zelfs een command dat een ongerelateerde sectie bekijkt traag worden of mislukken. Verplaats connectiviteitscontroles en reparaties naar aparte Artisan-commands.

<Tip>
  De voorwaarde `runningInConsole()` alleen garandeert niet dat de `boot()` van een uitgestelde service provider wordt uitgevoerd. Wil je de diagnostische informatie altijd registreren, plaats die registratie dan in een provider die direct wordt geladen. Voor een opzet waarin alleen de servicebindings worden uitgesteld, zie [Uitgestelde service providers](/nl/advanced/deferred-provider).
</Tip>

## CLI-weergave en JSON-types combineren

Wil je alleen de informatie van het package bekijken, geef dan de sectienaam op in kleine letters en in snake case. Voor `Acme Courier` is dat `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
```

Met het registratievoorbeeld hierboven ziet de JSON er als volgt uit wanneer `courier.enabled` `true` is en `courier.driver` `log`.

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

In de CLI wordt `Enabled` weergegeven als `ENABLED`. `AboutCommand::format()` is een helper waarmee je `console` voor de CLI en `json` voor JSON kunt opgeven. Het voorbeeld hierboven geeft alleen `console` op, dus in JSON wordt de oorspronkelijke booleaanse waarde teruggegeven. Je hoeft de weergavetekst van de CLI niet ongewijzigd in JSON te hergebruiken.

| Onderdeel | Conversie en verwerking in de implementatie |
| - | - |
| Waarde van `--only` en sectienaam | Vergeleken na omzetting naar kleine letters en daarna naar snake case |
| JSON-sectiesleutel | Sectienaam omgezet naar snake case |
| JSON-itemsleutel | Itemnaam omgezet naar kleine letters en daarna naar snake case |
| Waarde van `format()` | `console` in de CLI, `json` in JSON. Zonder opgave de oorspronkelijke waarde |

Gebruik je zoals in het voorbeeld namen die bestaan uit gewone Engelse woorden gescheiden door spaties, dan zijn filters en JSON-sleutels makkelijker te hanteren. Sleutels waar geautomatiseerde processen op vertrouwen, kunnen ook veranderen als je de weergavenaam aanpast. Controleer de compatibiliteit dus bij elke release.

## Geef secties een naam die specifiek is voor je package

`add()` voegt items toe aan dezelfde sectie. Een sectie met dezelfde naam opgeven vervangt dus niet de volledige eerder geregistreerde inhoud.

Kies een naam die zich onderscheidt van andere packages, zoals `Acme Courier`, en beperk toevoegingen aan de standaardsecties van Laravel `Environment`, `Cache`, `Drivers` en `Storage` tot gevallen waarin dat echt nodig is.

Registreer je in dezelfde sectie meerdere keren een item met dezelfde naam, dan kunnen in de CLI meerdere regels overblijven, terwijl ze in JSON onder dezelfde sleutel worden samengevoegd en de laatste waarde overblijft. Vermijd ook namen die anders geschreven zijn maar na omzetting naar snake case dezelfde sleutel opleveren. Houd de registratie op één plek en ontwerp items zo dat ze zowel in de CLI als in JSON uniek zijn.

## Statische registratiestatus in tests

Aan het begin van de uitvoering van `about` worden de weergavegegevens `$data` opnieuw geïnitialiseerd, maar de lijst met registraties voor toegevoegde informatie, `$customDataResolvers`, blijft behouden. Zo kan de informatie telkens opnieuw uit dezelfde registraties worden verzameld, maar als de `boot()` van de provider binnen hetzelfde PHP-proces herhaaldelijk wordt uitgevoerd, kunnen registraties zich opstapelen.

`AboutCommand::flushState()` is een methode die **de registraties van alle packages** en de weergavegegevens wist. Roep deze niet aan in een productieprovider om dubbele items in je eigen sectie te voorkomen: daarmee gaat ook de diagnostische informatie van andere packages verloren.

Bouw je de applicatie opnieuw op met je eigen testinfrastructuur, leg dan vast wie verantwoordelijk is voor het resetten van de status tussen tests. Reset je de status, doe dat dan vóórdat de betreffende provider wordt gestart en voer daarna alle benodigde registraties uit. Controleer ook of je bestaande testinfrastructuur de status al reset.

### Controlepunten vóór een release

Controleer de volgende combinaties met [Laravel-packages testen met Orchestra Testbench](/nl/advanced/package-testing) en in een echte applicatie die het package gebruikt.

| Te controleren handeling | Verwacht resultaat |
| - | - |
| `about --only=acme_courier` | Alleen de sectie van het package wordt getoond, zonder dubbele items |
| `about --only=acme_courier --json` | `enabled` wordt als boolean en `driver` als string opgehaald |
| `about --only=environment` | Het verzamelen van packageinformatie veroorzaakt geen externe communicatie of neveneffecten en het command eindigt normaal |
| In-/uitschakelen of driver wijzigen | De getoonde waarden en de JSON-waarden komen overeen met de configuratie op het moment van uitvoering |
| Twee keer uitvoeren in dezelfde applicatie | Items stapelen zich niet op en de informatie wordt bij elke uitvoering opnieuw verzameld |
| Applicatie opnieuw opbouwen in hetzelfde PHP-proces | De registratiestatus lekt niet tussen tests en informatie van andere packages gaat niet verloren |
| Met een configuratiecache | De configuratiewaarden die de applicatie gebruikt worden getoond, niet de inhoud van het gepubliceerde configuratiebestand |

## Gerelateerde pagina's

<Columns cols={2}>
  <Card title="Laravel-packages ontwikkelen" icon="box" href="/nl/advanced/package-development">
    De basis van providers en het registreren van resources.
  </Card>

  <Card title="Packageconfiguratie samenvoegen en cachen" icon="sliders" href="/nl/advanced/package-config-merging">
    De relatie tussen standaardwaarden, overschrijvingen door gebruikers en de configuratiecache.
  </Card>
</Columns>

## Geraadpleegde primaire bronnen

* [Officiële Laravel-documentatie: informatie toevoegen aan about vanuit een package](https://github.com/laravel/docs/blob/13.x/packages.md#about-artisan-command)
* [Officiële Laravel-documentatie: about en --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): registratie, evaluatievolgorde, sleutelconversie, `format()`, `flushState()`.
* [Laravel Framework v13.35.0: tests voor format](https://github.com/laravel/framework/blob/v13.35.0/tests/Foundation/Console/AboutCommandTest.php)
* [Laravel Framework v13.35.0: integratietests voor JSON-uitvoer](https://github.com/laravel/framework/blob/v13.35.0/tests/Integration/Foundation/Console/AboutCommandTest.php)


## Related topics

- [Laravel-packages ontwikkelen](/nl/advanced/package-development.md)
- [Statische analyse van packages (PHPStan / Larastan)](/nl/advanced/package-static-analysis.md)
- [Logging](/nl/logging.md)
- [Laravel Doctor — een diagnosetool voor applicaties](/nl/blog/laravel-doctor-introduction.md)
- [Foutafhandeling](/nl/error-handling.md)


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