允许使用FormRequest在Laravel中保存现有条目并且是唯一的

时间:2015-10-17 12:53:32

标签: validation laravel laravel-5.1

仍然noob并学习Laravel,我目前正在使用FormRequest进行简单验证。我今天面临的是编辑现有条目。

我在FormRequest中写道,我希望name是唯一的。它工作得很完美,但当然我编辑现有的条目时,我无法再保存它,它已经存在...当然,因为我正在编辑它。

我找到了阅读文档的解决方案,但不幸的是,它不起作用。这是我的代码:

路线:

Route::resource('editeurs', 'PublishersController');

控制器:

class PublishersController extends Controller
{
    /* Update an existing publisher */
    public function update($slug, PublisherRequest $request)
    {
        $publisher = Publisher::where('slug', $slug)->firstOrFail();

        $input = $request->all();

        $publisher->name = $input['name'];
        $publisher->slug = my_slug($input['name']);

        $publisher->save();

        return redirect()->action('PublishersController@show', $publisher->slug);
    }
}

FormRequest:

class PublisherRequest extends Request
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|unique:publishers,name,'.?????
        ];
    }
}

如果需要,视图:

@section('content')
    <div class="row">
        <h1 class="large-12 columns">Edition - {!! $publisher->name !!}</h1>

        {!! Form::model($publisher, ['method' => 'PATCH', 'action' => ['PublishersController@update', $publisher->slug]]) !!}
        <div class="large-12 columns">
            {!! Form::label('name', 'Nom de l\'éditeur') !!}
            {!! Form::text('name', null, ['placeholder' => 'Nom de l\'éditeur']) !!}
        </div>

        <div class="large-12 columns">
            {!! Form::submit('Ajouter un éditeur', ['class' => 'button expand']) !!}
        </div>
        {!! Form::close() !!}
    </div>
@stop

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

我将如何做到这一点:

    class PublishersController extends Controller
        {
            /* Update an existing publisher */
            public function update($slug, PublisherRequest $request)
            {
                $publisher = Publisher::where('slug', $slug)->firstOrFail();

                $this->validate($request, ['name' =>'required|unique:publishers,name,'.$publisher->id]);

                $publisher->name = $request->input('name');
                $publisher->slug = my_slug($publisher->name);

                $publisher->save();

                return redirect()->action('PublishersController@show', $publisher->slug);
            }
        }

答案 1 :(得分:0)

好的,我找到了解决方案。我需要通过当前出版商的slu ..

public function rules()
{
    $publisher = Publisher::where('slug', $this->editeurs)->first();

    return [
        'name' => 'required|unique:publishers,name,'.$publisher->id
    ];
}

这很有效。