Я создаю контроллер REST API для Symfony 2. Я начал использовать SensioGeneratorBundle для создания CRUD и модифицировал контроллер для работы в качестве контроллера REST. Однако у меня нет форм, поэтому я думаю об удалении этой части.
Как я могу проверить мои поля без формы? Все связано с формой, и я хочу некоторую свободу, включая настройку имен полей. Например, поля POST x и y интерпретируются Symfony как название и контент.
Чтобы быть правдой, форма напрямую не связана с проверкой. Позвольте мне объяснить это.
Компонент формы отвечает за сопоставление данных, полученных от клиента, будь то данные GET или POST. Таким образом, он будет отображать строку в объект вашего кода (может быть массивом, если он не привязан к сущности).
Форма использует компонент валидатора для проверки объекта после сопоставления данных. Это означает, что валидация объекта полностью отделена от компонента формы. Таким образом, когда форма проверяется, это действительно означает, что компонент формы проверяет вашу сущность, а не данные формы. То, что проверяется, является сущностью, а не формой.
Форма используется исключительно для принятия строкового представления и сопоставления его с иерархией сущности. Документация отражает это, поскольку форма и проверка являются отдельными разделами книги symfony.
При этом это также означает, что проверка сущностей может быть выполнена вне компонента формы с большой легкостью. Вы определяете константы как аннотации или во внешнем файле (yml, php или xml) и используете компонент validator для проверки вашей сущности. Здесь пример кода, взятый из раздела « Проверка » книги:
use Symfony\Component\HttpFoundation\Response; use Acme\BlogBundle\Entity\Author; // ... public function indexAction() { $author = new Author(); // ... do something to the $author object $validator = $this->get('validator'); $errors = $validator->validate($author); if (count($errors) > 0) { return new Response(print_r($errors, true)); } else { return new Response('The author is valid! Yes!'); } }
Как вы можете видеть, здесь нет формы, а только объект и служба валидатора. Более того, компонент проверки Symfony2 полностью автономный. Это означает, что вы можете использовать его без всей структуры. При этом, когда вы используете автономный режим, вы теряете хорошую интеграцию с другими вещами.
Таким образом, ваша служба REST получает параметры, создает сущности из нее и использует службу валидатора для проверки их целостности. Использование формы не является обязательным для проверки объектов.