Qu’est-ce que tap()
tap() est un helper qui permet « d’utiliser une valeur tout en la renvoyant telle quelle ». Il sert à insérer un effet de bord.
L’implémentation dans Illuminate\Support\helpers.php est simple.
tap() ignore la valeur retournée par le callback. La valeur retournée est toujours la valeur d’origine.Utilisation de base
L’usage le plus courant : recevoir une valeur, la traiter, puis la renvoyer telle quelle.HigherOrderTapProxy est renvoyé, ce qui permet d’enchaîner directement des appels de méthode.
Cas d’utilisation fréquents
Insérer une sortie de débogage
Injecter des logs ou des événements dans une chaîne
Exécuter uniquement des effets de bord sans changer la valeur retournée
Qu’est-ce que le trait Tappable
En faisantuse Illuminate\Support\Traits\Tappable, vous ajoutez une méthode tap() à votre classe.
tap().
Utilisation en développement de packages
Tappable est pratique pour glisser un effet de bord au milieu d’une API fluide. Associé à Macroable et Conditionable, vous pouvez créer un builder extensible dans l’esprit Laravel.
Pages associées :
- Trait Macroable
- Trait Conditionable
- VOICEVOX for Laravel — un exemple concret où l’on ajuste
TalkAudioQueryouSongAudioQueryviatap()avant de les passer àgenerate().
Utilisations dans le cœur de Laravel
Le cœur de Laravel utilise réellementtap() / Tappable.
Illuminate\Routing\RoutercombineMacroableetTappable.Router::respondWithRoute()utilisetap($route)->bind(...)sans callback : après l’exécution debind(), la$routed’origine est renvoyée.Router::prepareResponse()utilisetap(..., fn (...) => event(...))pour déclencher un événement après la conversion de la réponse.Illuminate\Testing\Fluent\Concerns\Hasimplémente une aide aux assertions via la chaîne->tap(...)->first(...)->etc().
Pris isolément,
tap() est un petit helper, mais combiné à Macroable et Conditionable, il facilite l’écriture de chaînes de méthodes lisibles très fréquentes dans Laravel.Étapes suivantes
Trait Macroable
Découvrez la conception permettant d’ajouter des méthodes personnalisées aux classes existantes.
Trait Conditionable
Découvrez les chaînes conditionnelles via
when() / unless().