【问题标题】:Updated Selected Columns in Laravel 5.1 or Create a Custom Patch/PUT update function更新 Laravel 5.1 中的选定列或创建自定义补丁/PUT 更新函数
【发布时间】:2016-02-14 05:04:33
【问题描述】:

我正在开发一个系统,它运行良好。现在,我需要创建一个只更新选定列的自定义更新方法。主要更新工作正常,但我们只需要更新几列,而不是每个字段。所以我在 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() !!}

当我单击此表单上的更新按钮时,它会尝试验证数据,这实际上是在控制器的更新功能上。但我应该得到一个带有文本“你好”的视图

我认为是 PATCH 方法导致它转到更新方法,所以我尝试更改它甚至删除它,但它要么引发错误,要么引发相同的事情。

这是路线列表。

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

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

【问题讨论】:

  • 您的路由employees.updatephoto 被定义为接受GET 请求,但您对该路由的操作的表单方法是PUT。更改路由定义以匹配。
  • @JosephSilber 实际上,我看到了该答案,但所选答案不适用,因为我已经在 routes.php 文件中注册了我的新路线
  • @Bogdan,这实际上是我的观点,employees.updatephoto 路由如何接受 PATCH 请求。我已经尝试在表单操作上使用 PUT,但它会尝试验证数据,这意味着它将进入存储或更新功能。

标签: laravel laravel-5


【解决方案1】:

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

资源定义的路径employees/{employees}和你定义的employees/{employee}没有区别,因为路径变量名在匹配的时候无所谓,所以会一直匹配最先注册的路由。在这种情况下解决方案很简单,只需使用不同的路径定义来更新照片,例如:

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

仅通过此更改,您的照片编辑表单现在应该可以工作了。

【讨论】:

  • 是的,正是我需要的!谢谢:)
  • 对了,有没有办法直接访问updatephoto功能,不用先去editphoto页面。我尝试添加一个直接链接到 updatephoto 函数的按钮,但出现 MethodNotAllowedHttpException 错误。
猜你喜欢
  • 2015-10-15
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多