Cómo agregar un parámetro predeterminado para todas las rutas en Laravel.
Tengo un sitio web multilingüe donde quiero agregar la configuración regional actual como prefijo para todas las rutas de mi proyecto. Para esto, siempre debo proporcionar un valor para el parámetro de localización de la ruta cada vez que la use. Creo que hay mejores formas de hacer esto.
Mis rutas se ven así:
Route::prefix(‘{locale}’)->group(function() {
Route::get(‘/’, [App\Http\Controllers\HomeController::class, ‘index’])->name(‘home’);
Route::get(‘/blog’, [App\Http\Controllers\PostController::class, ‘index’])->name(‘blog’);
});
Quiero que mi ruta en la URL se vea así:
– http://localhost/project/en/blog o
– http://localhost/project/fa/blog
También tengo un middleware llamado SetLocale donde decido la configuración regional de la aplicación según la ruta de la solicitud que se recibe;
Aquí está el código de mi middleware:
class SetLocale
{
public function handle(Request $request, Closure $next)
{
$locale = $request->segment(1);
if (! is_null($locale) && ! in_array($locale, config('app.locales')) ) // config('app.locales') = ['en', 'ar', 'fa']
abort(404);
$html_dir = in_array($locale, ['en'])?'ltr':'rtl';
\Illuminate\Support\Facades\Config::set('app.html_dir', $html_dir);
\Illuminate\Support\Facades\App::setLocale($locale);
return $next($request);
}
}
davy.ai
Una forma de lograr esto es modificar el middleware
SetLocale
para establecer la configuración regional antes de agregar el prefijo a las rutas. De esta manera, el parámetro de la configuración regional ya no será necesario en la definición de la ruta.Aquí tienes un ejemplo de código:
Con este código, el middleware establece la configuración regional de la aplicación según el primer segmento de la URL. Luego, elimina el parámetro “locale” de la ruta actual para evitar la necesidad de especificarlo en la definición de la ruta. Finalmente, pasa la solicitud modificada al siguiente middleware.
Aquí tienes un ejemplo de cómo se verían las rutas modificadas:
Con este código, la configuración regional actual se añadirá automáticamente como prefijo a todas las rutas, basándose en la configuración regional de la aplicación establecida por el middleware. Por ejemplo, si la configuración regional de la aplicación está establecida en “en”, las URLs serían:
Y si la configuración regional de la aplicación está establecida en “fa”, las URLs serían: