如何在laravel中编辑表单时使用验证?

时间:2018-03-16 11:04:21

标签: validation laravel-5 model-view-controller backend

在我的博客控制器中,我有addBlog和updateBlog尝试使用验证器功能验证它们。 虽然添加博客它的工作方式已经过时,但在更新博客时,它一次又一次地说标题已经存在,因为我选择了标题为uniue。 那么我怎样才能使这项工作也可以进行编辑。

我正在使用laravel 5.2

protected function validator(array $data)
{
    return Validator::make($data, [
        'title' => 'required|max:255|unique:blogs',
        'meta_tags' => 'required|max:200',
        'content' => 'required|min:6',
    ]);
}



public function updateBlog(Request $request, $id)
{

    $this->middleware('auth');
    $user = Auth::user();

    $validator = $this->validator($request->all());
    if ($validator->fails()) {
        $this->throwValidationException(
            $request, $validator
        );
    }

    try{
        $blog_Request = Blog::findOrFail($id);
        $blog_Request->title = $request->get('title');;
        $blog_Request->meta_tags = $request->get('meta_tags');
        $blog_Request->content = $request->get('content');
        $blog_Request->status = $request->get('status');

        if ($blog_Request->save()) {
            $request->session()->flash('message', 'Blog saved successfully!');
            $request->session()->flash('alert-class', 'alert-success');
        } else {
            $request->session()->flash('message', 'Some error occoured!');
            $request->session()->flash('alert-class', 'alert-danger');            
        }
        return redirect()->route('blog.edit_blog', $id);
    } catch (QueryException $ex) {
        print_r("Error on line number " . $ex->getLine() . " in file " . $ex->getFile() ."</br>");
    }

}


public function addBlog(Request $request)
{
    $this->middleware('auth');
    $user = Auth::user();

    $validator = $this->validator($request->all());
    if ($validator->fails()) {
        $this->throwValidationException(
            $request, $validator
        );
    }

    $blog_Requests = new Blog;
    $blog_Requests->title = $request->get('title');;
    $blog_Requests->meta_tags = $request->get('meta_tags');
    $blog_Requests->content = $request->get('content');
    $blog_Requests->user_id = $user->id;

    try{
        if ($blog_Requests->save()) {
            $request->session()->flash('message', 'Blog saved successfully!');
            $request->session()->flash('alert-class', 'alert-success');
        } else {
            $request->session()->flash('message', 'Some error occoured!');
            $request->session()->flash('alert-class', 'alert-danger');            
        }
        return redirect()->route('blogs');
    } catch (QueryException $ex) {
        print_r("Error on line number " . $ex->getLine() . " in file " . $ex->getFile() ."</br>");
    }
}

1 个答案:

答案 0 :(得分:0)

我认为解决方案是在验证程序中添加$blog->id作为第二个参数,因为如果用户提供已经由使用博客。 :

return Validator::make($data, [
    'title' => 'required|max:255|unique:blogs,' . $blog->id,
    'meta_tags' => 'required|max:200',
    'content' => 'required|min:6',
]);

https://laracasts.com/discuss/channels/requests/problem-with-unique-field-validation-on-update?page=1

希望这有帮助!