0

Actualmente valido directamente en el controlador, ejemplo:

    $fields = request()->validate([
        'name' => 'required|max:60|min:2|unique:mi_tabla,name,'.$object->id,
    ]);

El código anterior es de la función update, por eso en el chequeo se dice el name debe ser único en la tabla mi_tabla excepto si el nombre pertenece igual (que no se tenga en cuenta a sí mismo).

Mi duda es ¿cómo trasladar esa regla a un Request para la validación?

public function rules()
{
}

Como saben, la validación se debe definir en rules pero aquí no recibe $object ¿hay forma de obtenerlo?

1
  • Tipicamente el id se pasa como parametro de la ruta. Puedes tomarlo de ahí Commented el 2 oct. 2022 a las 3:44

1 respuesta 1

2

La manera más sencilla es creando un arreglo estático en tu modelo. Aquí te dejo un ejemplo:

static $rules = [
    'type' => 'required|string',
    'title' => 'required|string',
    'description' => 'required|string',
    'unit_price' => [
        'required',
        'max:5',
        'regex:/^(([0-9]*)(\.([0-9]+))?)$/',
    ],
    'category_id' => 'required|integer',
    ];

de esta manera no te hace falta crear un método. Luego simplemente en el controller cuando llames a Request:

public function update(Request $request, $id){
 
    $product = Product::find($id);

    request()->validate(Product::$rules);

    $product->update($request->all());

    return response([
        'product updated': $product;
    ]);
}

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.