Подтвердить что ты не робот

Проверка объектов без формы в Symfony 2

Я создаю REST API-контроллер для Symfony 2. Я начал использовать SensioGeneratorBundle для создания CRUD и модифицировал контроллер для работы в качестве контроллера REST. Однако у меня нет форм, поэтому я думаю об удалении этой части.

Как я могу проверить мои поля без формы? Все связано с формой, и я хочу некоторую свободу, включая настройку имен полей. Например, поля POST x и y интерпретируются Symfony как название и контент.

4b9b3361

Ответ 1

Чтобы быть правдой, форма напрямую не связана с проверкой. Позвольте мне объяснить это.

Компонент формы отвечает за сопоставление данных, полученных от клиента, будь то данные GET или POST. Таким образом, он будет отображать строку в объект вашего кода (может быть массивом, если он не привязан к сущности).

Форма использует компонент validator для проверки объекта после того, как данные были сопоставлены с ним. Это означает, что валидация объекта полностью отделена от компонента формы. Таким образом, когда форма проверяется, это действительно означает, что компонент формы проверяет вашу сущность, а не данные формы. То, что проверяется, является сущностью, а не формой.

Форма используется исключительно для получения строкового представления и сопоставления его с иерархией сущности. Документация отражает это как Form и Validation представляют собой различные разделы symfony book.

При этом это также означает, что проверка сущностей может быть выполнена вне компонента формы с большой легкостью. Вы определяете константы как аннотации или во внешнем файле (yml, php или xml) и используете компонент validator для проверки вашей сущности. Вот пример кода, взятый из раздела Validation:

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 получает параметры, создает сущности из нее и использует службу проверки подлинности для проверки их целостности. Использование формы не является обязательным для проверки сущностей.