Skip to content

🗂 05. Configuración avanzada

El archivo de configuración ziggy.php es el corazón de la personalización de Ziggy. Este archivo se publica en tu directorio config cuando ejecutas el comando php artisan ziggy:generate. Veamos cómo puedes personalizarlo para adaptarlo a tus necesidades.

Estructura básica del archivo de configuración

Section titled “Estructura básica del archivo de configuración”
Archivo de configuración ziggy.php
<?php
// config/ziggy.php
return [
// Rutas que se deben incluir en el objeto JavaScript
'only' => [
'login',
'logout',
'home',
'api.*',
],
// Rutas que se deben excluir del objeto JavaScript
'except' => [
'admin.*',
'debug.*',
],
// Grupos de rutas según el entorno
'groups' => [
'admin' => [
'admin.*',
],
'api' => [
'api.*',
],
],
// URL base para generar las rutas
'url' => env('APP_URL'),
// Configuración para entornos multilingües
'locale' => true,
];

La opción only te permite especificar qué rutas deben incluirse en el objeto JavaScript. Esto es útil para reducir el tamaño del objeto Ziggy y mejorar el rendimiento.

'only' => [
'login',
'logout',
'home',
'api.*', // Incluye todas las rutas que comienzan con 'api.'
],

Selección de rutas específicas para exportar

Section titled “Selección de rutas específicas para exportar”

Una de las características más potentes de Ziggy es la capacidad de controlar qué rutas se exportan al frontend. Esto es crucial para:

  1. Seguridad: Evitar exponer rutas sensibles al frontend
  2. Rendimiento: Reducir el tamaño del objeto JavaScript
  3. Organización: Mantener separadas las rutas según su propósito
Filtrado de rutas con only
<?php
// config/ziggy.php
return [
'only' => [
// Rutas específicas por nombre
'users.index',
'users.show',
'products.*', // Todas las rutas de productos
// Rutas con patrones
'api.v1.*', // Todas las rutas de API v1
],
];

Ejemplo práctico: Separar rutas públicas y administrativas

Section titled “Ejemplo práctico: Separar rutas públicas y administrativas”
Separación de rutas por grupos
<?php
// config/ziggy.php
return [
'groups' => [
'public' => [
'login',
'register',
'password.*',
'products.*',
'cart.*',
'checkout.*',
],
'admin' => [
'admin.*',
'users.*',
'roles.*',
'permissions.*',
],
],
];

Para usar un grupo específico en tu frontend:

@routes('public')

Añadir middleware o grupos de rutas según el entorno

Section titled “Añadir middleware o grupos de rutas según el entorno”

Ziggy te permite configurar diferentes comportamientos según el entorno de ejecución de tu aplicación. Esto es especialmente útil cuando necesitas diferentes conjuntos de rutas para desarrollo, pruebas y producción.

Configuración por entorno
<?php
// config/ziggy.php
return [
// Configuración base para todos los entornos
'only' => [
'login',
'home',
'products.*',
],
// Configuraciones específicas por entorno
'production' => [
'except' => [
'debug.*',
'telescope.*',
],
],
'local' => [
'only' => [
'login',
'home',
'products.*',
'debug.*', // Incluir rutas de depuración solo en local
'telescope.*',
],
],
];

Puedes combinar Ziggy con middleware para controlar qué rutas se exponen según el usuario autenticado:

Middleware para Ziggy
<?php
// app/Http/Middleware/ZiggyRoutesMiddleware.php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use TightencoZiggyZiggy;
class ZiggyRoutesMiddleware
{
public function handle(Request $request, Closure $next)
{
// Determinar qué grupo de rutas usar según el usuario
$group = $request->user() && $request->user()->isAdmin()
? 'admin'
: 'public';
// Compartir las rutas con la vista
view()->share('ziggy', new Ziggy($group));
return $next($request);
}
}

Registra el middleware en app/Http/Kernel.php:

protected $middlewareGroups = [
'web' => [
// Otros middleware...
\App\Http\Middleware\ZiggyRoutesMiddleware::class,
],
];

Configuración para entornos multilingües

Section titled “Configuración para entornos multilingües”

Ziggy ofrece soporte para aplicaciones multilingües, permitiéndote generar URLs que respeten el idioma actual de la aplicación.

Configuración multilingüe
<?php
// config/ziggy.php
return [
// Habilitar soporte para localización
'locale' => true,
// O especificar un locale por defecto
'locale' => 'es',
];

Si tu aplicación utiliza prefijos de idioma en las URLs (como /es/productos o /en/products), Ziggy puede manejar esto automáticamente:

routes/web.php
Route::prefix('{locale}')
->middleware('locale')
->group(function () {
Route::get('products', 'ProductController@index')
->name('products.index');
});
Selector de idioma con Ziggy
// Componente de selector de idioma
import { ref, watch } from 'vue';
import route from 'ziggy-js';
export default {
setup() {
const currentLocale = ref('es');
const changeLocale = (newLocale) => {
currentLocale.value = newLocale;
// Redirigir a la misma página pero con el nuevo idioma
const currentRouteName = route().current();
const currentParams = route().params;
if (currentRouteName) {
window.location.href = route(currentRouteName, currentParams, {}, newLocale);
}
};
return {
currentLocale,
changeLocale
};
}
};

Personalización avanzada del objeto Ziggy

Section titled “Personalización avanzada del objeto Ziggy”

Puedes extender o modificar el objeto Ziggy antes de pasarlo al frontend para casos de uso específicos:

Personalización del objeto Ziggy
<?php
// En un Service Provider o middleware
use TightencoZiggyZiggy;
$ziggy = new Ziggy;
// Añadir datos personalizados al objeto Ziggy
$ziggy->customData = [
'user' => auth()->user() ? [
'id' => auth()->user()->id,
'permissions' => auth()->user()->permissions->pluck('name'),
] : null,
'settings' => [
'enableFeatureX' => config('features.x_enabled'),
'apiTimeout' => config('api.timeout'),
],
];
// Compartir con la vista
view()->share('ziggy', $ziggy);

Luego, en JavaScript:

// Acceder a los datos personalizados
console.log(Ziggy.customData.settings.enableFeatureX);
// Comprobar permisos del usuario
const hasPermission = (permission) => {
return Ziggy.customData.user &&
Ziggy.customData.user.permissions.includes(permission);
};
if (hasPermission('edit-users')) {
// Mostrar opciones de edición
}
Importante
  • Usa only para limitar las rutas expuestas al frontend
  • Nunca expongas rutas administrativas o sensibles a usuarios no autorizados
  • Considera usar middleware para filtrar rutas según el usuario
  • No añadas información sensible al objeto Ziggy
🐝