2015-10-17 63 views
1

保存Laravel中的現有條目仍然noob和學習Laravel,我目前正在使用FormRequest進行簡單驗證。我今天面臨的是編輯一個現有的條目。允許使用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('[email protected]', $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' => ['[email protected]', $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 

我的代碼有什麼問題?

+0

你的表單請求代碼看起來很好,所以它應該可以工作。你在提交時是否被重定向回''users/{id}/edit',並且'session('errors')'中有錯誤? – Bogdan

+0

是的,我被重定向到窗體,它顯示錯誤:'該名稱已經存在' –

+0

我假設你100%確定沒有其他具有該名稱的條目。 – Bogdan

回答

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('[email protected]', $publisher->slug); 
      } 
     } 
+0

是的,但我想將驗證與控制器分開。我假設FormRequest已經被創建來執行所有類型的驗證,包括這一個。事情是,它存在於官方的Laravel文檔中。 –

0

OK,我找到了解決辦法。我需要通過我目前的出版商的slu pass。

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

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

This works。

相關問題