Laravel Folio本地化URL配置:如何避免重复创建路由目录?
Laravel Folio 实现带语言前缀的URL(避免重复目录)
不用在de、en目录下重复创建页面文件,通过路由参数+本地化中间件就能实现需求,具体步骤如下:
1. 配置支持的语言列表
打开config/app.php,添加支持的语言数组并设置默认语言:
return [ // ... 'locale' => 'en', 'locales' => ['en', 'de'], // 新增支持的语言标识 // ... ];
2. 修改Folio路由注册
在routes/web.php中,将Folio路由包裹到带语言前缀的路由组里,同时添加语言校验规则和本地化中间件:
use Illuminate\Support\Facades\Route; use Laravel\Folio\Folio; use App\Http\Middleware\SetLocale; // 匹配带语言前缀的URL:domain.com/{locale}/xxx Route::prefix('{locale}') ->whereIn('locale', config('app.locales')) // 仅允许配置内的语言标识 ->middleware([SetLocale::class]) ->group(function () { Folio::path('resources/views/pages')->middleware(['web']); }); // 保留原无前缀路由(可选,可改为重定向逻辑) Route::middleware(['web'])->group(function () { Folio::path('resources/views/pages'); });
3. 创建本地化中间件
先执行命令生成中间件:
php artisan make:middleware SetLocale
打开app/Http/Middleware/SetLocale.php,编写语言设置逻辑:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; class SetLocale { public function handle(Request $request, Closure $next) { // 从路由参数获取语言标识,设置应用本地化 if ($locale = $request->route('locale')) { App::setLocale($locale); } return $next($request); } }
4. 页面内生成本地化链接
在Folio页面中,生成带语言前缀的URL可采用以下方式:
// 示例1:直接拼接生成users页面链接 $currentLocale = app()->getLocale(); echo url("/{$currentLocale}/users"); // 示例2:如果给Folio页面设置了路由名称(页面顶部加{{-- route: users --}}) echo route('users', ['locale' => $currentLocale]);
5. 可选:无前缀URL自动重定向到默认语言
若希望用户访问domain.com/users时自动跳转到默认语言的URL,修改无前缀路由组:
Route::get('{any}', function ($any) { $defaultLocale = config('app.locale'); return redirect("/{$defaultLocale}/{$any}"); })->where('any', '.*')->middleware(['web']);
内容的提问来源于stack exchange,提问作者Danzzz
相关产品推荐
相关产品推荐

