Laravel 8 Validación FormRequest - RVR Soluciones Informáticas en TI

Laravel 8 Validación FormRequest

Laravel 8 Validación FormRequest

Usando nombres diferentes de los campos en la base de datos

Cuando en tus formularios usas nombres en los inputs que son diferentes a los de la tabla en la base de datos.

Tabla en Migrations

Aqui declaramos la tabla, especificando que los campos unicos moduloID y descripcion, van relacionados con un nombre de relación “unicoenregistro”

public function up()
    {
        Schema::create('sys_estatus', function (Blueprint $table) {
            $table->id('estatusID');
            $table->integer('moduloID');
            $table->string('descripcion',40);
            $table->boolean('borrado')->default(0);
            $table->timestamps();
            $table->unique(['moduloID','descripcion'],'unicoenregistro');
        });
    }
Resultado del archivo Migrations

Formulario

En los formularios html, uso nombres diferentes a la tabla para que del lado del cliente o compilación no puedan intentar inyectar datos si supieran el nombre de los campos en la tabla.

<form class="needs-validation" method="POST" action="{{route('estatus.store')}}">
@csrf
<div class="row">
   <div class="col-md-4 mb-4">
      <label for="firstName">Descripción</label>
      <input type="text" class="form-control" id="nombre" name="nombre" placeholder="Escribe el nombre del modulo" value="{{old('nombre')}}">
@error('nombre')
<div class="alert alert-danger" role="alert">
<small>*{{$message}}</small>
</div>
@enderror
      </div>
   </div>
<div class="row">
   <div class="col-md-4 mb-4">
      <label for="modulo">Módulo</label>
      <select class="custom-select d-block w-100" id="modulo"  name="modulo">
         <option value="">Elije...</option>
      </select>
@error('modulo')
      <div class="alert alert-danger" role="alert">
         <small>*{{$message}}</small>
      </div>
@enderror
   <hr class="mb-12">
   </div>
</div>
<button class="btn btn-primary btn-lg btn-block bg-blue-500 " type="submit">Agregar Estatus</button>
</form>

FormRequest

Aqui fue donde buscando por internet, encontré esta forma, para que funcione y no este marcando error hay que agregar esta clase “Illuminate\Validation\Rule;”, entonces en la mayoria de los ejemplos viene solo Rule::unique(‘tabla’)->where(…..), y asi, pero pues curioseando un poco, o de hecho en el editor, fijandose mas, te das cuenta que acepta un segundo parametro y es el nombre del campo, asi es como pudo funcionar, si hay otra manera mas facil. Favor de hacermelo saber, si la encuentro publicare otra entrada.

public function rules()
{
   return [
      'nombre'=>
         [Rule::unique('sys_estatus','descripcion')->where('moduloID',$this->modulo)
            ],
            'modulo'=>
            [
                'required',
                Rule::unique('sys_estatus','moduloID')->where('descripcion',$this->nombre)
            ],
        ];
    }
Total Page Visits: 3249 - Today Page Visits: 6

Dejar una respuesta

Tu dirección de correo electrónico no será publicada.