DTO used to transfer data to the form and get data from it.
Definition
DTO must extend \XLite\Model\DTO\Base\ADTO
class
You must define at least two methods:
init
- to get data from given object and store it to DTO. Data must be stored at DTO class properties by section name as\XLite\Model\DTO\Base\CommonCell
.CommonCell
is object access to key -> value pairs represented form model fields for each section, If horizontal field used its value in DTO must be alsoCommonCell
.protected function init($object)
{
$this->default = new CommonCell([
'identity' => $object->getProductId(),
'generate_sku' => !(boolean) $object->getProductId(),
'sku' => $object->getSku(),
'name' => $object->getName(),
'price' => $object->getPrice(),
'full_description' => $object->getDescription(),
]);
$this->price = new CommonCell([
'price' => $object->getPrice(),
'inventory_tracking' => new CommonCell([
'inventory_tracking' => $object->getInventoryEnabled(),
'quantity' => $object->getAmount(),
]),
]);
}populateTo
- to transfer data from DTO to given object.
Validation
You can define DTO level backend validation to check the entire DTO. To do this you can define \XLite\Model\DTO\Base\ADTO::validate()
static method:
/**
+ @param Info $dto
+ @param ExecutionContextInterface $context
*/
public static function validate($dto, ExecutionContextInterface $context)
{
if (!empty($dto->default->sku) && !static::isSKUValid($dto)) {
static::addViolation($context, 'default.sku', Translation::lbl('SKU must be unique'));
}
}
If there is invalid state you mast call \XLite\Model\DTO\Base\ADTO::addViolation()
method with 3 params:
- $context - the second param of
validate
method. - $field - full field name in dot notation (
[section].[field]
or[section].[field].[subfield]
). - $message - message described the error.