Qu’est-ce que le trait Conditionable
Le traitIlluminate\Support\Traits\Conditionable ajoute les méthodes when() et unless() à un objet. Sa particularité est de permettre de continuer une chaîne de méthodes tout en dérivant le traitement en fonction d’une condition.
Les sources réelles se trouvent dans
src/Illuminate/Conditionable/Traits/Conditionable.php. Elles sont référencées via l’alias Illuminate\Support\Traits\Conditionable.Utilisation de base
when() — s’exécute lorsque la condition est vraie
unless() — s’exécute lorsque la condition est fausse
unless() est l’inverse de when(). Le callback est exécuté lorsque la condition est fausse.
Pourquoi le chaînage continue
Si la valeur de retour du callback estnull, c’est $this (l’objet qui utilise le trait) qui est retourné. Si le callback ne retourne pas null, c’est sa valeur de retour qui est retournée.
null), $this est retourné.
Appel sans argument — HigherOrderWhenProxy
Appelerwhen() sans argument retourne un HigherOrderWhenProxy. Cela permet de définir la condition ultérieurement.
Passer une closure comme valeur
Passer une closure en premier argument utilise la valeur de retour de l’exécution de cette closure comme condition.Pattern typique avec QueryBuilder
La construction dynamique de requêtes avecwhen() est le cas d’usage le plus courant.
Appliquer Conditionable à votre propre classe
Il suffit d’unuse du trait pour disposer de when() / unless().
Utilisation avec Mail, Notification, Response
when() est également utilisable pour la construction d’e-mails, de notifications et de réponses.
Différence avec tap()
tap() et when() se ressemblent mais ont des objectifs différents.
Étapes suivantes
Messages d'ordre supérieur de Collection
Apprenez le mécanisme de la syntaxe
$collection->map->method() et son utilisation pratique.