1
resposta

[Dúvida] Utilização de um DTO (Data Transfer Object) para validação

Não seria mais interessante utilizar um DTO que representasse a validação dos dados? Para separar as regras de negócio.

Receberiamos a instância desse objeto no próprio construtor, e dentro do DTO haveriam as validações.

Controller


    public function store(Request $request, CreateSeriseDTO $teste)
    {
        $serie = Serie::create($request->all());
        return to_route('series.index')->with('mensagem.sucesso', "Série '{$serie->nome}' adicionada com sucesso");
    }

DTO


namespace App\Models\DTO\Series;

use Illuminate\Http\Request;

class CreateSeriseDTO
{
    private string $nome;
    public function __construct(Request $request) {
        // realizar validação
        $this->nome = $request->nome;
    }
 
    public function getNome()
    {
        return $this->nome;
    }
}
1 resposta

Olá, Paulo! Tudo bem?

No caso específico do Laravel, você pode utilizar o recurso de Form Request Validation para realizar as validações de forma automática, sem precisar criar um DTO separado. O Laravel já possui uma estrutura própria para validação de dados, que é bastante poderosa e flexível. Você pode definir as regras de validação diretamente no método rules() do seu Form Request e o Laravel cuidará de realizar as validações para você.

Por exemplo, no seu caso, você poderia criar um Form Request chamado CreateSeriesRequest e definir as regras de validação nele. Ficaria algo assim:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CreateSeriesRequest extends FormRequest
{
    public function rules()
    {
        return [
            'nome' => 'required|string',
            // outras regras de validação aqui
        ];
    }
}

E no seu Controller, você só precisaria injetar esse Form Request no método store:

use App\Http\Requests\CreateSeriesRequest;

public function store(CreateSeriesRequest $request)
{
    $serie = Serie::create($request->all());
    return redirect()->route('series.index')->with('mensagem.sucesso', "Série '{$serie->nome}' adicionada com sucesso");
}

Dessa forma, o Laravel irá automaticamente validar os dados recebidos no Request de acordo com as regras definidas no Form Request. Caso a validação falhe, o Laravel retornará automaticamente uma resposta de erro.

Todo este processo é visto nesta aula:

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓