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

Laravel10+Livewire V3升级后create路由报语法错误求助

Laravel 10 + Livewire 3 创建路由语法错误排查

问题现象

访问模型的create路由时,反复出现错误:syntax error, unexpected identifier "Name", expecting ")"。代码语法无明显问题,其他路由和视图使用相同变量均正常;注释掉Blade中的__()语言函数与@error错误提示块后,视图可正常运行。项目刚完成从Laravel 9到10、Livewire 2到3的升级。

相关代码

Livewire组件(Create.php)

<?php

namespace App\Livewire\Fcrop;

use App\Models\Farm;
use App\Models\Fcrop;
use Livewire\Component;

class Create extends Component
{
    public $farm, $name, $type, $area;

    public function mount(Farm $farm)
    {
        $this->farm = $farm;
    }

    protected $messages = [
        'name' => 'Name is required.'
    ];

    public function createCropType()
    {
        $this->validate([
            'name' => 'required|min:5',
            'area' => 'integer'
        ]);

        Fcrop::create([
            'farm_id' => $this->farm->id,
            'name' => $this->name,
            'type' => $this->type,
            'area' => $this->area,
        ]);

        return redirect()->route('farm.edit', $this->farm->id);
    }

    public function render()
    {
        return view('livewire.fcrop.create');
    }
} 

Blade视图(create.blade.php)

<form wire:submit="createCropType" method="POST" class="space-y-8 divide-y divide-gray-200">
    <div class="space-y-8 sm:space-y-5">
        <div class="pt-8 space-y-6 sm:pt-10 sm:space-y-5">
            <div class="space-y-6 sm:space-y-5">
                <div class="sm:grid sm:grid-cols-3 sm:gap-4 sm:items-start">
                    <label for="name" class="block text-sm font-medium text-gray-700">
                        {{ __('Name') }}
                    </label>
                    <div class="mt-1 sm:mt-0 sm:col-span-2">
                        <input wire:model.live="name" type="text" name="name" id="name">
                        @error('name')<span class="mt-2 text-sm text-red-600">{{ $message }}</span>@enderror
                    </div>
                </div>
                <!-- 其他表单字段 -->
            </div>
        </div>
    </div>
</form>

解决方法

  • 检查翻译文件语法:__('Name')触发错误,大概率是对应语言文件(如resources/lang/en/validation.php或自定义翻译文件)存在语法问题,比如括号不匹配、引号未闭合,导致Blade编译解析失败。打开相关翻译文件,排查并修复语法错误。
  • 清理缓存:升级后旧的编译视图或Livewire缓存可能残留,执行以下命令清理:
    php artisan view:clear
    php artisan livewire:clear
    php artisan cache:clear
    
  • 调整Livewire验证消息格式:Livewire 3对验证消息的定义有兼容要求,将原protected $messages数组改为方法形式:
    protected function messages()
    {
        return [
            'name.required' => 'Name is required.',
            // 可添加其他字段的验证消息
        ];
    }
    
  • 排查Blade特殊字符:确保{{ __('Name') }}前后没有全角空格、不可见字符等,替换成半角空格重新输入该代码行。
  • 验证Livewire指令兼容性:确认所有Livewire指令符合3.x版本规范,比如wire:model.live是正确的,旧版的wire:submit.prevent已改为wire:submit(当前代码已符合要求)。

内容的提问来源于stack exchange,提问作者Charles Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:55:08