es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de solicitud REST de Symfony 4 API. (DATOS POST)

Continúo aprendiendo Symfony y en esta ocasión me gustaría recibir ideas sobre cómo validar correctamente los datos de solicitud POST antes de almacenarlos. Estoy intentando tener el controlador más pequeño posible. He leído sobre DTO (para implementar la validación usando esto). Además, veo que podemos validar la solicitud utilizando comentarios de entidad. Ejemplo:

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    /**
     * @Assert\NotBlank
     */
    private $name;
}

Por favor, dame algunos ejemplos de cómo validar los datos de solicitud entrantes en una API REST de Symfony. Como desarrollador de Laravel, puedo decir que podemos hacerlo de esta manera:

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    // El post del blog es válido...
}

O podemos usar TypeHinting:

public function store(StorePostRequest $request)
{
        // La solicitud entrante es válida...

        // Recuperar los datos de entrada validados...
        $validated = $request->validated();
}

¿Cómo podemos hacerlo en Symfony manteniendo la idea de un controlador delgado?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Existen varias formas de validar los datos de solicitud entrantes en Symfony y mantener el controlador delgado:

    1. Utilizando la Validación de Formulario:
      Symfony proporciona un Componente de Formulario integrado, que puede utilizarse para crear formularios que manejen la validación. Podemos crear un tipo de formulario para los datos de solicitud y definir restricciones utilizando el componente de validación de Symfony. El formulario puede ser manejado automáticamente por Symfony y cualquier error de validación puede ser devuelto en la respuesta.
    2. Utilizando DTO de Solicitud:
      Podemos crear un DTO de Solicitud (Objeto de Transferencia de Datos) para nuestros datos de solicitud entrantes y utilizar el componente de validación de Symfony para agregar restricciones a sus propiedades. Luego, podemos utilizar el DTO como argumento para nuestra acción de controlador. Symfony validará automáticamente los datos entrantes basándose en las restricciones definidas en el DTO.

    3. Utilizando la Validación de Entidad:
      Como se mencionó en la pregunta, podemos utilizar comentarios de entidad para agregar restricciones de validación a las propiedades de nuestra entidad. Esto puede ser útil cuando solo necesitamos validar los datos con fines de persistencia de datos.

    Ejemplo:

    use Symfony\Component\Validator\Constraints as Assert;
    
    class CreatePostRequest
    {
        /**
         * @Assert\NotBlank
         * @Assert\Length(max=255)
         */
        public $title;
    
        /**
         * @Assert\NotBlank
         */
        public $body;
    }
    
    // Acción del controlador
    public function create(CreatePostRequest $request)
    {
        // Symfony validará automáticamente los datos entrantes basándose en las restricciones
        // definidas en el DTO CreatePostRequest.
    
        // Si los datos no son válidos, Symfony lanzará una excepción de validación,
        // la cual puede ser capturada y manejada.
    
        // De lo contrario, podemos proceder a persistir los datos.
    }
    

    Utilizando uno de estos métodos, podemos mantener nuestro controlador delgado y separar la lógica de validación de nuestra lógica de negocio.

Comments are closed.