On gists
Closure modifier
•
PHP
example.php
Raw
#
<?php
// TransportListResolver
public function getList(Order\Order $order, ?\Closure $transportListResolverModifier = null): array
{
$orderItems = $order->getItems($order::ITEM_PRODUCT);
$transportListResolver = $this->transport->getTransportSelectionResolver()
->getBaseSelection()
->setCountry($order->delivery__country_id)
->setUserGroups($this->user->isLoggedIn() ? $this->user->getRoles() : NULL)
->setWeight($order->getUniqueWeights())
->setOnlyForProduct($this->transport->listTransportOnlyForProduct($orderItems))
->setDistance(isset($order->distance) ? $order->distance : null);
if ($transportListResolverModifier) {
$transportListResolverModifier($transportListResolver);
}
$list = array_filter(
$transportListResolver->toArray(),
fn($transport) => !$transport->transport_carrier->mandatory_type_choice
|| $this->transportTypeChoice->listTransportChoiceOnlyForProduct($transport->id, $orderItems)
|| $this->transportTypeChoice->listTransportChoiceOnlyForProduct($transport->id, $orderItems) === null
);
return $list;
}
// usage in another class
// we can modify object via closure
$transportList = $this->transportListResolver->getList($order, function (TransportEshopOrderSelectionResolver $transportListResolver) {
$transportListResolver->setWithChoiceNeeded(true);
});