2012-04-25 21 views
35

Estoy creando un controlador REST API para Symfony 2. Empecé a usar el SensioGeneratorBundle para crear un CRUD y modifiqué el controlador para que actuara como un controlador REST. Sin embargo, no tengo formularios, así que estoy pensando en eliminar esta parte.Validación de entidades sin formulario en Symfony 2

¿Cómo puedo validar mis campos sin un formulario? Todo está conectado a la forma y quiero algo de libertad, incluida la personalización de los nombres de los campos. Por ejemplo, los campos POST xey son interpretados por Symfony como título y contenido.

Respuesta

69

Para ser cierto, la forma no está directamente relacionada con la validación. Déjame explicar esto.

El componente de formulario es responsable de mapear los datos recibidos del cliente, ya sea datos GET o POST. Por lo tanto, mapeará la cadena al objeto de su código (puede ser una matriz si no es vinculante para una entidad).

Formulario de uso del componente validador para validar la entidad después de que se le han asignado los datos. Esto significa que la validación de la entidad está totalmente desacoplada del componente de formulario. Entonces, cuando se valida el formulario, realmente significa que el componente del formulario valida su entidad y no los datos del formulario. Lo que se valida es la entidad, no la forma.

El formulario se utiliza únicamente para tomar una representación de cadena y asignarla a la jerarquía de entidades. La documentación refleja esto ya que Form y Validation son secciones distintas de symfony book.

Dicho esto, esto también significa que la validación de entidades se puede hacer fuera del componente de formulario con gran facilidad. Usted define constaints como anotaciones o en un archivo externo (yml, php o xml) y utiliza el componente validador para validar su entidad. Aquí un ejemplo de código tomado de la sección Validation del libro:

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!'); 
    } 
} 

Como se puede ver, no hay forma en juego aquí, solamente un objeto y el servicio validador. Además, el componente de validación de Symfony2 es completamente independiente. Esto significa que puede usarlo sin todo el marco. Dicho esto, cuando se usa de forma independiente, se pierde una buena integración con otras cosas.

De esta forma, su servicio REST recibe parámetros, crea entidades a partir de él y utiliza el servicio del validador para validar su integridad. El uso del formulario no es obligatorio para validar entidades.

+1

Maravillosa respuesta, muchas gracias. – vinnylinux

+0

Esta respuesta fue absolutamente perfecta para mí al crear mi API RESTful. – Seer

+0

¡Hola! ¿Es posible validar una solicitud ?, por ejemplo, en mi solicitud, estoy enviando un correo electrónico y una clave, por lo que quiero validar esta solicitud con estos dos campos sin un formulario. – SoldierCorp

Cuestiones relacionadas