如何在表单请求上创建唯一验证(UPDATE / PATCH)的条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在表单请求上创建唯一验证(UPDATE / PATCH)的条件相关的知识,希望对你有一定的参考价值。

我试图通过将“验证请求”移动到名为“BookRequest”的表单请求来使控制器更清洁。

问题是在更新过程中,我尝试创建一个条件来检查,如果它是PATCH或POST与以下代码

MyRequest.php

public function rules()
    {

        // Check Create or Update
        if ($this->method() == 'PATCH') 
        {
            $a_rules = 'required|string|size:6|unique:books,column2,' .$this->get('id');
            $b_rules = 'sometimes|string|size:10|unique:books,column3,' .$this->get('id');
        }

        else 
        {
            $a_rules = 'required|string|size:6|unique:books,column2';
            $b_rules = 'sometimes|string|size:10|unique:books,column3';
        }

        return [
            'column1'             => 'required|string|max:100',
            'column2'             => $a_rules,
            'column3'              => $b_rules,
            'column4'    => 'required|date',
            'column5'            => 'required|in:foo,bar',
            'column6'        => 'required',
            'column7'       => 'required',
            'column8'       => 'required',
        ];

    }

.$this->get('id')它失败了,表格仍然在更新上对待唯一。

Controller@update

public function update($id, BookRequest $request)
{
    $book = Book::findOrFail($id);
    $input = $request->all();
    $book->update($request->all());
    return view('dashboards.book');
}

Controller@edit

public function edit($id)
{

    $book = Book::findOrFail($id);


    return view('dashboards.edit', compact('book'));
}

Controller@create

public function create()
{

    return view('dashboards.create');
}

Controller@store

public function store(BookRequest $request)
{


    $input = $request->all();
    $book = Book::create($input);

    return redirect('dashboards/book/index');
}

我尝试替代.$book->id,它给我一个ErrorException Undefined变量:book

有什么建议吗?顺便说一句,我正在使用Laravel 5.2

答案

您正在使用book作为路由参数,但尝试使用id。试试这个-

if ($this->method() == 'PATCH') 
    {
        $a_rules = 'required|string|size:6|unique:books,column2,' .$this->route()->parameter('book');
        $b_rules = 'sometimes|string|size:10|unique:books,column3,' .$this->route()->parameter('book');
    }

希望能帮助到你 :)

以上是关于如何在表单请求上创建唯一验证(UPDATE / PATCH)的条件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 在商店和更新上的表单请求验证使用相同的验证

如何在使用 laravel 表单请求更新数据时验证电子邮件的唯一性?

Laravel 5.4 表单请求唯一验证:如何访问 id?

表单请求验证中的 Laravel“独特”自定义消息验证

如何在 Angular2 中触发表单验证器

在表单字段验证中获取请求