You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中点击按钮后Livewire组件返回404错误(关联Mcamara本地化)

问题原因

当测试路由被包裹在LaravelLocalization的路由分组内时,Livewire的AJAX请求没有自动带上locale前缀,导致请求路径(如/livewire/message/test-component)与实际带前缀的路由规则不匹配,触发404错误。而路由在分组外时,请求无需前缀即可匹配,因此功能正常。

解决方案

方法1:自定义Livewire路由注册逻辑,加入locale前缀

在App\Providers\AppServiceProvider的boot方法中,重新定义Livewire的路由规则,让它继承本地化分组的前缀和中间件:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Livewire\Livewire;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use Illuminate\Support\Facades\Route;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Livewire::setRoute(function ($handle) {
            return Route::group([
                'prefix' => LaravelLocalization::setLocale(),
                'middleware' => ['web', 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath']
            ], function () use ($handle) {
                Route::post('/livewire/message/{name}', $handle)->name('livewire.message');
            });
        });
    }
}

方法2:修改Livewire配置文件的路径前缀

编辑config/livewire.php,将path配置项动态设置为带当前locale的路径:

'path' => '/' . app()->getLocale() . '/livewire',

注意:这种方法在用户切换locale后需要确保配置能实时更新,因此更推荐方法1,它会自动适配当前生效的locale。

额外检查项

  • 确认config/laravellocalization.php中的supportedLocales配置包含当前访问的locale值。
  • 执行php artisan route:clear清除路由缓存,避免旧配置干扰。
  • 确保web中间件已包含在本地化分组的中间件列表,或全局应用在路由中。

完成以上操作后,点击Increment按钮时,AJAX请求会自动带上locale前缀(如/en/livewire/message/test-component),即可正确匹配路由并更新计数。

内容的提问来源于stack exchange,提问作者Mustapha Boumaza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:00:58