Request Builder
Request Builder is a component of the Magento payment gateway responsible for building a request from several parts. It allows implementing complex, yet atomic and testable, building strategies. Each builder can have simple logic or contain builder composites.
Basic interface
The basic interface for a request builder is \Magento\Payment\Gateway\Request\BuilderInterface
.
Builder composite
\Magento\Payment\Gateway\Request\BuilderComposite
is a container for a list of \Magento\Payment\Gateway\Request\BuilderInterface
implementations. It gets a list of classes, or types, or virtual type names, and performs a lazy instantiation on an actual BuilderComposite::build([])
call. So that you can have as many objects, as required, but only those, which are needed for a request are instantiated.
BuilderComposite
implements the composite design pattern.
The concatenation strategy is defined in the BuilderComposite::merge()
method. So if you need to alter the strategy, you need to add your custom implementation of BuilderComposite
.
Adding a builder composite
Builder composites are added using dependency injection in di.xml
. A builder composite might comprise simple builders as well as other builder composites.
Example of adding composite builders for the Braintree payment provider (app/code/Magento/Braintree/etc/di.xml
):
(The code sample is from Magento Open Source v2.1. Although the payment provider gateway was added in v2.0, the particular default implementation using the gateway were added in v2.1)