Sylius - возвращать сообщения проверки при сохранении продукта

Когда я использую sylius.factory.productздесь https://docs.sylius.com/en/1.6/book/products/products.html

Добавление продукта

/** @var ProductFactoryInterface $productFactory **/
$productFactory = $this->get('sylius.factory.product');

/** @var ProductInterface $product */
$product = $productFactory->createNew();
$product->setName('T-Shirt');
$product->setCode('00001');
$product->setSlug('t-shirt');

/** @var RepositoryInterface $productRepository */
$productRepository = $this->get('sylius.repository.product');

$productRepository->add($product);

и установите для параметра Code (имеет уникальный идентификатор) значение, которое уже существует. Я получаю исключение. Я хочу получить сообщение проверки "Код продукта должен быть уникальным". сообщение предоставлено sylius
Как это сделать?

1 ответ

Решение

Используйте для этого проверку Symfony. Установите ограничение для своей сущности:

# config/validator/validation.yaml
App\Entity\Product:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: [code]
            message: 'Product code must be unique'

А потом позвони validate() на Validator оказание услуг:

public function productMethod(
    ProductFactoryInterface $productFactory, 
    ValidatorInterface $validator
) {
    /** @var ProductFactoryInterface $productFactory **/
    $productFactory = $this->get('sylius.factory.product');

    /** @var ProductInterface $product */
    $product = $productFactory->createNew();
    $product->setName('T-Shirt');
    $product->setCode('00001');
    $product->setSlug('t-shirt');

    $errors = $validator->validate($product);

    if (count($errors) > 0) {
        $errorsString = (string) $errors;
        return $errorsString;
    }

    // ...do something else
}
Другие вопросы по тегам