Skip to main content
Version: X-Cart 5.4 and earlier

Form model DTO and validation

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 also CommonCell.

    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.