【问题标题】:How to use the ignore rule in Form Request Validation如何在表单请求验证中使用忽略规则
【发布时间】:2020-11-28 05:43:30
【问题描述】:

这是 http/request 中的 PostsRequest.php:

<?php

    namespace App\Http\Requests;
    
    use App\Post;
    use Illuminate\Foundation\Http\FormRequest;
    use Illuminate\Validation\Rule;
    
    class PostsRequest extends FormRequest
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true;
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                'title' => ['required','max:255', Rule::unique('posts')->ignore($this->id)],
                'slug' => ['required', Rule::unique('posts')->ignore($this->id),],
                'content' => 'required',
                'type' => 'required|in:blog,download,page',
                'status' => 'required',
            ];
        }
    }

这是 PostController.php 中的 edit() 方法

   public function update(PostsRequest $request, $id)
    {

        $validated = $request->validated();
        $validated['user_id'] = auth()->user()->id;
        $post = Post::find($id)->fill($validated);
        $post->save();

        return redirect()->action('PostController@index');
    }

问题: 在更新页面中显示该值已存在的错误。
谁来解决编辑表单中唯一字段的问题?

【问题讨论】:

  • 很抱歉,您写的内容很难看懂!请重写所有内容,以更清楚地了解您要做什么以及遇到什么问题,提供错误消息以及所有涉及问题的代码!谢谢!

标签: laravel laravel-7 laravel-validation laravel-request


【解决方案1】:

如果您想从路由中解析$id,那么您可以在请求类中使用route() 方法,例如

Rule::unique('posts')->ignore($this->route('id'))

【讨论】:

  • @MehdiJalali 它包含在我的答案中:$this-&gt;route('id')。用我的答案中的规则替换您拥有的 unique 规则应该可以解决您的问题。
【解决方案2】:

问题已解决

更改:

Rule::unique('posts')->ignore($this->route('id'))

与:

Rule::unique('posts')->ignore($this->route('post'))

【讨论】:

  • 我在 Laravel 8 中遇到问题,当我通过 API 使用更新并且字段不一样时如何定义此选项,并且也不使用 ID 作为用户的确定参数。如果你使用 slug,并且 URL 参数不是 ID,也许 user/{slug} 你可以在请求文件规则中这样设置:Rule::unique('users', 'email')-&gt;ignore($this-&gt;route('manage_user'), 'slug')Users 是表,email 是列,manage_user 是路由参数,slug 是 Rule 将检查的列。
猜你喜欢
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多