56 lines
2.1 KiB
PHP
Executable File
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.',
|
|
];
|
|
}
|
|
}
|