2012-04-25 2 views
35

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

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

ответ

69

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

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

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

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

+1

Wondeful ответ, большое спасибо. – vinnylinux

+0

Этот ответ был абсолютно идеальным для меня при создании моего RESTful API. – Seer

+0

Привет! Можно ли проверить запрос ?, например, в моем запросе я передаю письмо и ключ, поэтому я хочу проверить этот запрос с этими двумя полями без формы. – SoldierCorp

Смежные вопросы