2015-11-12 42 views
1

我正在使用一個系統,它的工作完美。現在,我需要創建一個只更新選定列的自定義更新方法。主要更新工作正常,但我們只需要更新幾列,而不是每個字段。所以我在我的EmployeeController基礎索引上添加了兩個新的函數,創建,更新,存儲,銷燬和刪除。更新Laravel 5.1中的選定列或創建自定義補丁/ PUT更新功能

public function editphoto($EmployeeID) 
{ 
    $employee=Employee::find($EmployeeID); 

    return view('employees.editphoto',compact('employee'));  
} 

public function updatephoto($EmployeeID) 
{ 
    return view('hello'); 
} 

在我routes.php文件文件,我添加了兩個新航線

Route::resource('employees', 'EmployeesController'); 
Route::get('employees/{employee}/editphoto', '[email protected]')->name('employees.editphoto'); 
Route::get('employees/{employee}', '[email protected]')->name('employees.updatephoto'); 

在我的新editphoto.blade.php視圖

{!! Form::model($employee,['method' => 'PUT','route'=>['employees.updatephoto',$employee->EmployeeID]]) !!} 

{!! Form::label('GrandFathersName', 'Grand Fathers Name') !!} 
{!! Form::text('GrandFathersName',null,['class'=>'form-control']) !!} 

<a class="btn btn-success pull-left form-control" href="{{ URL::route('employees.index') }}">Cancel</a> 

{!! Form::close() !!} 

當我點擊更新按鈕,它會嘗試驗證數據,這實際上是控制器的更新功能。但我應該得到一個文本'你好'的看法

我認爲這是導致它進入更新方法的PATCH方法,所以我試圖改變它,甚至刪除它,但它要麼拋出錯誤或相同的事情。

以下是路由列表。

route list

我試過在Add new methods to a resource controller in Laravel的解決方案,即使它是laravel 4.我沒有嘗試第二個答案,雖然它沒有標記爲一個解決方案。此外,您可以看到我已在控制器上添加了適當的路線。

那麼,如何創建一個PATCH動作請求的新更新方法,或者如何使用PUT或任何其他動作請求更新數據的新方法?

+0

您的路線命名'employees.updatephoto'被定義爲接受'GET'請求,但是您的表單方法對該路由的行爲是'PUT'。更改路線定義以匹配。 – Bogdan

+0

@JosephSilber其實,我看到了答案,但選擇的答案不適用,因爲我已經在routes.php文件中註冊了我的新路線 – EtDes

+0

@Bogdan,這實際上是我的觀點,employees.updatephoto路線如何接受PATCH要求。我已經在表單動作上嘗試了PUT,但它試圖驗證數據,這意味着它將進入商店或更新功能。 – EtDes

回答

1

您的問題是,當您嘗試更新照片時,已由Route::resource定義的employees.update路由與傳入的URL路徑和HTTP謂詞相匹配。

資源定義的路徑employees/{employees}和你定義的employees/{employee}之間沒有區別,因爲路徑變量名匹配時無關緊要,所以它總是與首先註冊的路由匹配。該解決方案是很容易在這種情況下,只需要使用一個不同的路徑定義更新的照片,例如:

Route::put('employees/{employee}/updatephoto', '[email protected]')->name('employees.updatephoto'); 

這種轉變只有你的編輯照片的形式,現在應該工作。

+0

是的,正是我需要的!謝謝:) – EtDes

+0

順便說一下,有沒有辦法直接訪問updatephoto功能,而無需先到editphoto頁面。我試圖添加一個按鈕,直接鏈接到updatephoto函數,但我得到MethodNotAllowedHttpException錯誤。 – EtDes