Skip to main content
page last edited on 26 July 2016

Form model DTO and validation

This article applies to the specific versions of software: X-Cart 5.3.0 and later
Version: 5.4 and early

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.