我正在研究一个系统并且它工作正常。现在,我需要创建一个自定义更新方法,该方法只更新选定的列。主要更新工作正常,但我们只需更新几列,而不是每个字段。所以我在基本索引之上的EmployeeController上添加了两个新函数,创建,更新,存储,销毁和删除。
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', 'EmployeesController@editphoto')->name('employees.editphoto');
Route::get('employees/{employee}', 'EmployeesController@updatephoto')->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() !!}
当我单击此表单上的更新按钮时,它会尝试验证数据,这实际上是控制器的更新功能。但是我应该用文本“#hello&#39;
来查看我认为是PATCH方法导致它转到更新方法,所以我试图改变它甚至删除它,但它会抛出错误或同样的事情。
这是路线列表。
我已经尝试了Add new methods to a resource controller in Laravel上的解决方案,即使它是针对laravel 4.我没有尝试第二个答案,尽管它没有被标记为解决方案。此外,您可以看到我在Controller上添加了正确的路由。
那么,如何使用PATCH操作请求创建新的更新方法,或者如何使用带有PUT或任何其他操作请求的新方法更新数据?
答案 0 :(得分:1)
您的问题是,当您尝试更新照片时,employees.update
已定义的Route::resource
路由与传入的URL路径和HTTP谓词匹配。
资源定义的路径employees/{employees}
与您定义的employees/{employee}
之间没有区别,因为路径变量名称在匹配时并不重要,因此它始终与路径匹配首先登记。在这种情况下,解决方案很简单,只需使用不同的路径定义来更新照片,例如:
Route::put('employees/{employee}/updatephoto', 'EmployeesController@updatephoto')->name('employees.updatephoto');
单独进行此更改,您的编辑照片表单现在可以正常工作。