更新了Laravel 5.1中的选定列或创建自定义修补程序/ PUT更新功能

时间:2015-11-12 18:35:48

标签: laravel laravel-5

我正在研究一个系统并且它工作正常。现在,我需要创建一个自定义更新方法,该方法只更新选定的列。主要更新工作正常,但我们只需更新几列,而不是每个字段。所以我在基本索引之上的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方法导致它转到更新方法,所以我试图改变它甚至删除它,但它会抛出错误或同样的事情。

这是路线列表。

route list

我已经尝试了Add new methods to a resource controller in Laravel上的解决方案,即使它是针对laravel 4.我没有尝试第二个答案,尽管它没有被标记为解决方案。此外,您可以看到我在Controller上添加了正确的路由。

那么,如何使用PATCH操作请求创建新的更新方法,或者如何使用带有PUT或任何其他操作请求的新方法更新数据?

1 个答案:

答案 0 :(得分:1)

您的问题是,当您尝试更新照片时,employees.update已定义的Route::resource路由与传入的URL路径和HTTP谓词匹配。

资源定义的路径employees/{employees}与您定义的employees/{employee}之间没有区别,因为路径变量名称在匹配时并不重要,因此它始终与路径匹配首先登记。在这种情况下,解决方案很简单,只需使用不同的路径定义来更新照片,例如:

Route::put('employees/{employee}/updatephoto', 'EmployeesController@updatephoto')->name('employees.updatephoto');

单独进行此更改,您的编辑照片表单现在可以正常工作。