🔄 03. Uso básico en JavaScript puro
Importar rutas con import route from ‘ziggy-js’
Section titled “Importar rutas con import route from ‘ziggy-js’”Una vez que has instalado y configurado Ziggy en tu proyecto Laravel, puedes comenzar a utilizarlo en tu código JavaScript. El primer paso es importar la función route desde el paquete ziggy-js.
// Importar la función routeimport route from 'ziggy-js';
// Si necesitas acceder al objeto Ziggy directamenteimport { Ziggy } from './ziggy';Uso global vs. importación en módulos
Section titled “Uso global vs. importación en módulos”Existen dos formas principales de utilizar Ziggy en tu aplicación:
Si has configurado Ziggy para estar disponible globalmente (usando window.route = route), puedes usarlo directamente sin importarlo:
// En cualquier archivo JavaScriptconst url = route('users.index');Esta es la forma más sencilla y es ideal para aplicaciones más pequeñas o cuando no estás utilizando un sistema de módulos.
Para aplicaciones más grandes o cuando estás utilizando un sistema de módulos, es mejor importar la función route donde la necesites:
// En un módulo específicoimport route from 'ziggy-js';
export function getUserProfileUrl(userId) { return route('users.profile', { id: userId });}Este enfoque es más modular y facilita las pruebas unitarias.
Acceder a rutas con route(‘nombre.ruta’)
Section titled “Acceder a rutas con route(‘nombre.ruta’)”La forma más básica de utilizar Ziggy es llamar a la función route() con el nombre de la ruta que deseas generar.
// Generar una URL para la ruta 'home'const homeUrl = route('home');// Resultado: 'https://miapp.com/'
// Generar una URL para la ruta 'dashboard'const dashboardUrl = route('dashboard');// Resultado: 'https://miapp.com/dashboard'
// Generar una URL para una ruta con nombre compuestoconst adminSettingsUrl = route('admin.settings');// Resultado: 'https://miapp.com/admin/settings'Verificar si una ruta existe
Section titled “Verificar si una ruta existe”Puedes verificar si una ruta existe antes de intentar generarla:
if (route().has('users.profile')) { // La ruta 'users.profile' existe const profileUrl = route('users.profile');} else { // La ruta no existe, manejar el caso alternativo console.warn('La ruta users.profile no está definida');}Listar todas las rutas disponibles
Section titled “Listar todas las rutas disponibles”También puedes obtener un listado de todas las rutas disponibles:
// Obtener todas las rutas disponiblesconst allRoutes = route().all();console.log(allRoutes);Generar URLs con parámetros
Section titled “Generar URLs con parámetros”Muchas rutas en Laravel requieren parámetros, como IDs o slugs. Ziggy hace que sea fácil pasar estos parámetros al generar URLs.
// Ruta con un parámetroconst userProfileUrl = route('users.show', 1);// Resultado: 'https://miapp.com/users/1'
// También puedes usar un objeto para mayor claridadconst userProfileUrl = route('users.show', { user: 1 });// Resultado: 'https://miapp.com/users/1'
// Múltiples parámetrosconst commentUrl = route('posts.comments.show', { post: 5, comment: 10 });// Resultado: 'https://miapp.com/posts/5/comments/10'Parámetros de consulta (query string)
Section titled “Parámetros de consulta (query string)”Puedes añadir parámetros de consulta adicionales que no forman parte de la definición de la ruta:
// Añadir parámetros de consultaconst searchUrl = route('products.index', { category: 'electronics', sort: 'price', order: 'asc'});// Resultado: 'https://miapp.com/products?category=electronics&sort=price&order=asc'
// Combinar parámetros de ruta y de consultaconst filteredUserUrl = route('users.show', { user: 1, tab: 'settings', view: 'advanced'});// Resultado: 'https://miapp.com/users/1?tab=settings&view=advanced'Manejo de rutas con segmentos opcionales y comodines
Section titled “Manejo de rutas con segmentos opcionales y comodines”Ziggy también soporta rutas de Laravel con segmentos opcionales y comodines.
Segmentos opcionales
Section titled “Segmentos opcionales”En Laravel, puedes definir segmentos opcionales en tus rutas usando ?. Ziggy maneja estos segmentos de manera intuitiva:
// Supongamos que tienes esta ruta en Laravel:// Route::get('/projects/{project}/{task?}', 'ProjectController@show')->name('projects.show');
// Sin el parámetro opcionalconst projectUrl = route('projects.show', { project: 123 });// Resultado: 'https://miapp.com/projects/123'
// Con el parámetro opcionalconst taskUrl = route('projects.show', { project: 123, task: 456 });// Resultado: 'https://miapp.com/projects/123/456'Comodines (Wildcards)
Section titled “Comodines (Wildcards)”Las rutas con comodines en Laravel (usando *) también son compatibles con Ziggy:
// Supongamos que tienes esta ruta en Laravel:// Route::get('/files/{path}', 'FileController@show')->where('path', '.*')->name('files.show');
// Acceder a un archivo en una subcarpetaconst fileUrl = route('files.show', { path: 'documents/2023/report.pdf' });// Resultado: 'https://miapp.com/files/documents/2023/report.pdf'Rutas con restricciones (where)
Section titled “Rutas con restricciones (where)”Ziggy respeta las restricciones definidas en tus rutas de Laravel:
// Supongamos que tienes esta ruta en Laravel con restricciones:// Route::get('/users/{id}', 'UserController@show')// ->where('id', '[0-9]+')// ->name('users.show');
// Ziggy validará que el parámetro cumpla con la restricciónconst validUrl = route('users.show', { id: 123 });// Resultado: 'https://miapp.com/users/123'
// Si intentas usar un valor que no cumple con la restricción,// Ziggy lanzará un error en modo de desarrollotry { const invalidUrl = route('users.show', { id: 'abc' });} catch (error) { console.error('Error:', error.message); // Error: El parámetro "id" para la ruta "users.show" debe coincidir con el patrón "[0-9]+".}Ejemplos prácticos
Section titled “Ejemplos prácticos”// Redireccionar a otra páginawindow.location.href = route('dashboard');
// Usar con enlacesdocument.getElementById('profileLink').href = route('users.profile', { id: currentUser.id });// Con Fetch APIfetch(route('api.users.index')) .then(response => response.json()) .then(data => console.log(data));
// Con Axiosaxios.get(route('api.users.show', { user: userId })) .then(response => { console.log(response.data); });
// POST con datosaxios.post(route('api.users.store'), { name: 'Nuevo Usuario', email: 'usuario@ejemplo.com'});// Configurar la acción de un formulariodocument.getElementById('userForm').action = route('users.update', { user: userId });
// Crear un formulario dinámicamenteconst form = document.createElement('form');form.method = 'POST';form.action = route('logout');
// Añadir token CSRFconst csrfInput = document.createElement('input');csrfInput.type = 'hidden';csrfInput.name = '_token';csrfInput.value = document.querySelector('meta[name="csrf-token"]').content;form.appendChild(csrfInput);
// Añadir método HTTP (para PUT, DELETE, etc.)const methodInput = document.createElement('input');methodInput.type = 'hidden';methodInput.name = '_method';methodInput.value = 'DELETE';form.appendChild(methodInput);
document.body.appendChild(form);form.submit();