我在设置 Laravel 11 区域设置和 livewire 3 一起工作时遇到问题。问题是 Livewire post 请求“POST:livewire/update”失败,我收到 404 响应,但如果我禁用区域设置前缀和中间件,livewire 工作正常。
引导pp.php
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
then: function () {
$locale = request()->segment(1);
if(in_array($locale,config('app.locales'))){
Route::middleware('web')
->prefix($locale)
->name('webroutes')
->group(base_path('routes/web.php'));
}
},
)
->withMiddleware(function (Middleware $middleware) {
$middleware->append(\App\Http\Middleware\SetLanguage::class);
})
->withExceptions(function (Exceptions $exceptions) {
})->create();
SetLanguage.php 中间件
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$locale = $request->segment(1);
if (!in_array($locale, config('app.locales'))) {
return redirect(url(getCurrentUrlWithLocale(config('app.fallback_locale'))));
}
app()->setLocale($locale);
return $next($request);
}
}
排除故障后,我发现 Liveware post 请求不适用于 URL 前面的区域设置语言,例如域名.test/fr/todo。有人可以帮助我从区域设置功能中排除帖子“livewire/update”,或者使后期工作请求与前置区域设置 URL 配合使用吗?
您可以采取的解决方案之一是
->withRouting(
commands: __DIR__.'/../routes/console.php',
using: function () {
Route::middleware(['web','locale'])->group(base_path('routes/web.php'))
}
)->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'locale' => SetLanguage::class
])
})
请注意,
health (/up)
路由不会被注册,因此您也可以在回调中定义它。
web.php
中定义的路由包裹在 Route::middleware()->group(fn () => ...)
Route::middleware(SetLanguage::class)->group(function () {
// register routes here
})