【问题标题】:The @error not showing the Errors in Laravel@error 未显示 Laravel 中的错误
【发布时间】:2021-04-09 09:52:27
【问题描述】:

在 Blade 中,不显示单个 @error,但在 @foreach ($errors->all() as $error) 中显示所有错误。 这是验证

public function updateAthlete(){
        $pass = Hash::make($this->password);
        $info = Athlete::find($this->athlete_id);
    if($this->profile_photo_path){
        File::delete('storage/' . $this->filePath);
        $this->filePath = $this->profile_photo_path->store('AthletesProfile', 'public');
    }

    $this->validate([
        'name'               =>'required|max:70|min:3',
        'name_fa'            =>'required|max:70|min:3',
        'name_pa'            =>'required|max:70|min:3',
    ]);
    
    $info->update([
        'name'               => $this->name,
        'name_fa'            => $this->name_fa,
        'name_pa'            => $this->name_pa,
   ]);

   session()->flash('updated', 'Post successfully updated.');

}

这是表格

<div class="form-group form-group-default">
    <label>Name in Farsi</label>
    <input type="text" class="form-control" dir="RTL" wire:model="name_fa">
  @error('name_fa') <span class="error" style="color:red">{{ $message }}</span> @enderror
</div>

它没有在控制台中显示任何错误,或者它与样式无关

【问题讨论】:

  • 这将工作@if ($errors-&gt;has('name_fa')) &lt;span class="error" style="color:red"&gt;{{ $errors-&gt;first('name_fa') }}&lt;/span&gt; @endif
  • 那也没用
  • 您需要将Request 对象传递给validate 方法。

标签: laravel laravel-blade laravel-livewire


【解决方案1】:

一种方法是通过php artisan make:request UpdateAthleteRequest 创建表单请求验证,该文件将位于app\Http\Requests 文件夹中,并将您的规则添加到 rules() 方法中。

public function rules()
{
    return [
        'name'               =>'required|max:70|min:3',
        'name_fa'            =>'required|max:70|min:3',
        'name_pa'            =>'required|max:70|min:3',
    ];
}

在您的控制器中,使用该文件并:

public function updateAthlete(UpdateAthleteRequest $request){
$pass = Hash::make($this->password);
        $info = Athlete::find($this->athlete_id);
    if($this->profile_photo_path){
        File::delete('storage/' . $this->filePath);
        $this->filePath = $this->profile_photo_path->store('AthletesProfile', 'public');
    }
    
    $info->update($request->validated());

   session()->flash('updated', 'Post successfully updated.');
}

完成后您必须重定向到视图文件。就目前而言,您的访问者在更新数据后会看到一个空白页面。

【讨论】:

  • 问题@user13708077 你在使用livewire吗?从您提供的代码中不清楚这一点。我刚刚注意到标签laravel-livewire.... 我的建议是为非livewire 环境设计的。
【解决方案2】:

你不能像这样使用验证功能。

您需要传递一个 Request 实例以使其工作:

public function updateAthlete(Request $request) 
{
    // .....

    $request->validate([
        'name'               =>'required|max:70|min:3',
        'name_fa'            =>'required|max:70|min:3',
        'name_pa'            =>'required|max:70|min:3',
    ]);

    // or :

    $this->validate($request, [
        'name'               =>'required|max:70|min:3',
        'name_fa'            =>'required|max:70|min:3',
        'name_pa'            =>'required|max:70|min:3',
    ]);
}

【讨论】:

    【解决方案3】:
    `$data = array_merge($data, [
        'name'               => $this->name,
        'name_fa'            => $this->name_fa,
        'name_pa'            => $this->name_pa,
    

    ]);`

    `$validateData = array_merge($validateData, [
        'name'               =>'required|max:70|min:3',
        'name_fa'            =>'required|max:70|min:3',
        'name_pa'            =>'required|max:70|min:3',
    ]);`
    
    `$validation = Validator::make($data, $validateData)->validate();`
    
    `$info->update($validation);`
    
    `session()->flash('updated', 'Post successfully updated.');`
    

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 2020-12-04
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2012-12-14
      • 2018-07-29
      • 2016-09-29
      • 2018-08-03
      相关资源
      最近更新 更多