Conditionable 트레이트란
Illuminate\Support\Traits\Conditionable 트레이트는 오브젝트에 when()과 unless() 메서드를 추가합니다. 조건에 따라 처리를 분기하면서 메서드 체인을 이어갈 수 있는 것이 특징입니다.
실제 소스는
src/Illuminate/Conditionable/Traits/Conditionable.php에 있습니다. Illuminate\Support\Traits\Conditionable이라는 별칭에서 참조되고 있습니다.기본적인 사용법
when() — 조건이 참일 때 실행하기
unless() — 조건이 거짓일 때 실행하기
unless()는 when()의 반대입니다. 조건이 거짓일 때 콜백이 실행됩니다.
메서드 체인이 이어지는 이유
콜백의 반환값이null인 경우, $this(트레이트를 사용하는 오브젝트)가 반환됩니다. 콜백이 null을 반환하지 않는 경우에는 그 반환값이 그대로 반환됩니다.
null) 경우에는 $this가 반환됩니다.
인수 없이 호출하기 — HigherOrderWhenProxy
인수 없이when()을 호출하면 HigherOrderWhenProxy가 반환됩니다. 이를 사용하면 조건을 나중에 설정할 수 있습니다.
클로저를 값으로 전달하기
첫 번째 인수에 클로저를 전달하면, 해당 클로저가 실행된 반환값이 조건으로 사용됩니다.QueryBuilder에서의 전형적인 패턴
when()을 사용한 동적 쿼리 구축은 가장 일반적인 유스케이스입니다.
Conditionable을 자체 클래스에 적용하기
트레이트를use하는 것만으로 when() / unless()를 사용할 수 있게 됩니다.
Mail·Notification·Response에서의 활용
when()은 메일·알림·응답 구축에서도 사용할 수 있습니다.
tap()과의 사용 구분
tap()과 when()은 비슷하지만 목적이 다릅니다.
다음 단계
컬렉션의 고차 메시지
$collection->map->method()와 같은 구문의 구조와 실전적인 사용법을 배웁니다.