php - Laravel 资源控制器更新方法未触发
问题描述
我有一个TruckController
通过php artisan make:controller TruckController --resource
.
当我去 go 时localhost/trucks/1/edit
,编辑表单成功显示。
当我点击提交时,我被重定向到资源展示页面(localhost/trucks/1
);但是,卡车信息没有更新,也没有引发错误。
似乎该update
功能根本没有触发,我认为这意味着action
我的表单中的属性有问题,但我仍然不确定。路由应该没有问题,因为应该已经定义了路由,因为它是资源控制器。
编辑刀片.php
<form method="PUT" action="{{ action('TruckController@update', ['id' => $truck->id]) }}" class="validate form-horizontal form-groups-bordered" novalidate="novalidate">
@csrf
<input type="hidden" name="state" data-geo="administrative_area_level_1" value="{{ $truck->state }}">
<input type="hidden" name="city" data-geo="locality" value="{{ $truck->city }}">
<input type="hidden" name="zipcode" data-geo="postal_code" value="{{ $truck->zipcode }}">
[ ... ]
</form>
卡车控制器@update
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(TruckCreateRequest $request, Truck $truck)
{
$validated = $request->validated();
$truck->name = $request->name;
$truck->description = $request->description;
$truck->save();
}
TruckCreateRequest.php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TruckCreateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'description' => 'required',
'city' => 'required',
'state' => 'required',
'zipcode' => 'required',
'address' => 'required'
];
}
}
以防万一这可能会有所帮助...
网页.php
<?php
Auth::routes();
// ajax
Route::post('ajax/notifications/clear', 'DashboardController@mark_notifications_read');
Route::get('/', 'DashboardController@index')->name('dash');
Route::resource('events', 'EventController');
Route::resource('venues', 'VenueController');
Route::resource('trucks', 'TruckController');
Route::resource('admin', 'AdminController');
应用程序/模型/卡车.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Truck extends Model
{
//
}
解决方案
来自 Laravel 文档:
由于 HTML 表单无法发出 PUT、PATCH 或 DELETE 请求,因此您需要添加一个隐藏的 _method 字段来欺骗这些 HTTP 动词。
尝试在表单中添加一个隐藏的方法字段:
@method('PUT')
推荐阅读
- blazor - Blazor:使用列表项包装 NavLink
- python - 如何自动更新excel链接数据?
- walmart-api - 我没有在 walmart API 中获得值集偏移量
- html - 使用背景图像转换的极简图像滑块,包含最少的 HTML 和 CSS
- python - 在 Robot Framework 中传递 *args
- latex - 如何在 LaTeX 中将标题和图像保持在一起?
- oauth-2.0 - (如何)我可以使用 Gitlab.com 对我的 Angular 应用程序进行身份验证吗?
- python - 将 Combobox 的选定值绑定到子程序
- pytorch - 在 PyTorch 中定义批量大小 = 1 的手动排序的 MNIST 数据集
- ios - 将任何依赖项添加到 Flutter 项目时,“运行 pod install 时出错/无法加载 UTF8Handler 的 Unicode 表”