Как правильно фильтровать и мапить данные при реализации API на Symfony?
Доброго времени суток!
Возник вопрос, а точнее пару вопросов:
- как правильно валидировать (фильтровать) данные из реквеста без компонента Form
- как мапить данные на сущности без использования JMSSerializerBundle
Немного погуглив, часто натыкался на то что Component Form это не лучьший вариант для использования в API, но никто почему-то не предложил альтернативных решений.
galliard, а в чем проблема? У тебя по факту будет в каждом контроллере один и тот же вызов валидатора. Правила валидации все равно описаны через аннотации:
use Symfony\Component\Validator\Constraints as Assert;
class DTO
{
/**
* @var string
*
* @Assert\NotBlank()
*/
public $name;
/**
* @var string
*
* @Assert\NotBlank()
* @Assert\Email()
*/
public $email;
/**
* @var string
*
* @Assert\NotBlank()
*/
public $address;
}
galliard, сложно без конкретного примера, но чаще всего группы используются если
- У вас не DTO, а Entity (к примеру, разделить редактирование и создание). В случае использования DTO, они чаще всего разные на редактирование и создание
- Надо валидировать объект в зависимости от его содержимого. В этом случае логика проставления группы может быть вынесена во все тот же резолвер
Если все-таки они нужны я бы прокидывал их через request attributes
galliard, идея действительно хорошая, я использую валидационные группы на DTO-шках ибо не хочу плодить много resolver-ов и DTO-шек.
Если у вас есть еще варианты, поделитесь)
Данный способ проверил, работает! Еще раз спасибо BoShurik )))