Files
lash_vanshy/app/Http/Requests/ProductoRequest.php

56 lines
2.1 KiB
PHP
Executable File

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProductoRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$rules = [
'nombre' => ['required', 'string', 'max:255'],
'descripcion' => ['required', 'string', 'max:5000'],
'precio' => ['required', 'numeric', 'min:0', 'regex:/^\d+(\.\d{1,2})?$/'],
'imagen' => ['nullable', 'image', 'mimes:jpeg,png,gif,webp', 'max:10240'],
'categoria' => ['required', 'string', 'max:100'],
'destacado' => ['nullable', 'boolean'],
'activo' => ['nullable', 'boolean'],
'orden' => ['nullable', 'integer', 'min:0'],
];
// En actualización, imagen no es obligatoria
if ($this->isMethod('PATCH') || $this->isMethod('PUT')) {
$rules['imagen'] = ['nullable', 'image', 'mimes:jpeg,png,gif,webp', 'max:10240'];
}
return $rules;
}
public function messages(): array
{
return [
'nombre.required' => 'El nombre es obligatorio.',
'nombre.max' => 'El nombre no puede exceder 255 caracteres.',
'descripcion.required' => 'La descripción es obligatoria.',
'descripcion.max' => 'La descripción no puede exceder 5000 caracteres.',
'precio.required' => 'El precio es obligatorio.',
'precio.numeric' => 'El precio debe ser un número válido.',
'precio.min' => 'El precio no puede ser negativo.',
'precio.regex' => 'El precio debe tener como máximo 2 decimales.',
'imagen.image' => 'La imagen debe ser un archivo de imagen.',
'imagen.mimes' => 'El formato de imagen no es válido.',
'imagen.max' => 'La imagen no puede exceder 10MB.',
'categoria.required' => 'La categoría es obligatoria.',
'categoria.max' => 'La categoría no puede exceder 100 caracteres.',
'orden.integer' => 'El orden debe ser un número entero.',
'orden.min' => 'El orden no puede ser negativo.',
];
}
}