Laravel ofrece varias formas de validar los parámetros de una ruta para garantizar que cumplan con ciertos criterios antes de procesarlos en un controlador. A continuación, te mostramos los métodos más comunes para lograrlo.
Puedes usar expresiones regulares directamente en las rutas para validar parámetros. Esto se hace mediante el método where
.
use Illuminate\Support\Facades\Route;
Route::get('/user/{id}', 'UserController@show')
->where('id', '[0-9]+'); // Solo permite números
Explicación:
Si deseas aplicar varias restricciones, usa el método where
en formato de arreglo:
Route::get('/post/{id}/{slug}', 'PostController@show')
->where(['id' => '[0-9]+', 'slug' => '[a-zA-Z\-]+']);
Request
Laravel permite validar los parámetros de la solicitud en el controlador mediante la clase Request
y las reglas de validación.
use Illuminate\Http\Request;
public function show(Request $request, $id)
{
$request->validate([
'id' => 'required|integer|min:1', // Valida que sea un entero positivo
]);
// Lógica del controlador
}
Explicación:
Si necesitas validar parámetros de forma más estructurada, puedes usar Form Requests. Este enfoque es ideal para rutas con validaciones complejas o reutilizables.
Genera un archivo con el comando:
php artisan make:request ValidateIdRequest
Edita el archivo generado (e.g., App\Http\Requests\ValidateIdRequest.php
) para definir las reglas:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ValidateIdRequest extends FormRequest
{
public function rules()
{
return [
'id' => 'required|integer|min:1',
];
}
public function authorize()
{
return true; // Cambia a lógica específica si es necesario
}
}
use App\Http\Requests\ValidateIdRequest;
public function show(ValidateIdRequest $request, $id)
{
// Lógica del controlador
}
Route Model Binding
)
Laravel permite vincular automáticamente modelos a los parámetros de la ruta, validando su existencia en la base de datos.
En el archivo de rutas:
use App\Models\User;
Route::get('/user/{user}', 'UserController@show');
En el controlador:
use App\Models\User;
public function show(User $user)
{
// El parámetro $user ya contiene un modelo User válido
return view('user.show', compact('user'));
}
Laravel ofrece flexibilidad para validar parámetros de rutas mediante restricciones en el archivo de rutas, validación en el controlador, Form Requests y el uso de Route Model Binding. La elección del enfoque depende de la complejidad de la validación y la estructura de tu aplicación.
Para más detalles, consulta la documentación oficial de Laravel.
Jorge García
Fullstack developer