Wat is tap()?
tap() is een helper om “een waarde te gebruiken en diezelfde waarde ongewijzigd terug te geven”. Je gebruikt hem wanneer je een bijeffect wilt tussenvoegen.
De implementatie in Illuminate\Support\helpers.php is eenvoudig.
tap() negeert de returnwaarde van de callback. De returnwaarde is altijd de oorspronkelijke waarde.Basisgebruik
Het meest basale gebruik is: een waarde ontvangen, verwerken en ongewijzigd teruggeven.HigherOrderTapProxy terug, zodat je direct methodeaanroepen kunt doorketenen.
Veelvoorkomende toepassingen
Debugoutput tussenvoegen
Logging of events invoegen midden in een keten
Alleen een bijeffect uitvoeren zonder de returnwaarde te wijzigen
Wat is de Tappable-trait?
DoorIlluminate\Support\Traits\Tappable te usen, voeg je een tap()-methode toe aan je klasse.
tap().
Toepassing in packageontwikkeling
Tappable is handig wanneer je halverwege een fluent API een bijeffect wilt tussenvoegen. In combinatie met Macroable en Conditionable maak je een uitbreidbare builder in Laravel-stijl.
1
Maak een fluente klasse
2
Combineer Macroable, Conditionable en Tappable
- Macroable-trait
- Conditionable-trait
- VOICEVOX for Laravel — een praktijkvoorbeeld waarin je
TalkAudioQueryenSongAudioQuerymettap()bijstelt voordat je ze naargenerate()stuurt
Gebruiksvoorbeelden in de Laravel-core
Ook in Laravel zelf wordentap() / Tappable daadwerkelijk gebruikt.
Illuminate\Routing\RoutergebruiktMacroableenTappablesamen- In
Router::respondWithRoute()wordttap($route)->bind(...)zonder callback gebruikt, zodat na het uitvoeren vanbind()nog steeds de oorspronkelijke$routewordt teruggegeven - In
Router::prepareResponse()wordt na het converteren van de response mettap(..., fn (...) => event(...))een event afgevuurd - In
Illuminate\Testing\Fluent\Concerns\Haswordt assertie-ondersteuning geïmplementeerd met de keten->tap(...)->first(...)->etc()
Op zichzelf is
tap() een kleine helper, maar samen met Macroable en Conditionable bouw je er makkelijk de leesbare methodeketens mee die je vaak in Laravel ziet.Volgende stappen
Macroable-trait
Leer het ontwerp waarmee je eigen methodes toevoegt aan bestaande klassen.
Conditionable-trait
Leer conditionele ketens met
when() / unless().