Laravel Controller@update 函数

Posted

技术标签:

【中文标题】Laravel Controller@update 函数【英文标题】:Laravel Controller@update function 【发布时间】:2019-04-26 00:00:56 【问题描述】:

所以,我试图将我的新统计信息发送到我的 CharactersController 中的更新函数,但它说这个错误:'MethodNotAllowedHttpException'。我尝试了方法欺骗,但没有奏效。

这是我要编辑角色的索引($tet 是我正在观看的角色的行函数):

!! Form::open(['action' => ['CharactersController@update', $tet->id], 'method' => 'POST','id'=>'form1', 'enctype' => 'multipart/form-data']) !!
<tr>
<td>HP:</td>
<td>$tet->hp</td>
<td><button class="btn btn-primary" onclick="addValue(1)">+</button></td>
<td><p>-></p></td>
<td><input id="jedna" class="edit" name="hodnota" type="number" disabled="true" value=$tet->hp></td>
</tr>
<tr>
<td>ATTACK:</td>
<td>$tet->attack</td>
<td><button class="btn btn-primary" onclick="addValue(2)">+</button></td>
<td><p>-></p></td>
<td><input id="dva" class="edit" name="hodnota" type="number" disabled="true" value=$tet->attack></td>
</tr>
<tr>
<td>LUCK:</td>
<td>$tet->luck</td>
<td><button class="btn btn-primary" onclick="addValue(3)">+</button></td>
<td><p>-></p></td>
<td><input id="tri" class="edit" name="hodnota" type="number" disabled="true" value=$tet->luck></td>
</tr>
<tr>
<td>AGILITY:</td>
<td>$tet->agility</td>
<td><button class="btn btn-primary" onclick="addValue(4)">+</button></td>
<td><p>-></p></td>
<td><input id="ctyri" class="edit" name="hodnota" type="number" disabled="true" value=$tet->agility></td>
</tr>
<button onclick="uloz()">SAVE ALL</button>
Form::hidden('_method','PUT')
Form::close()

在“uloz()”功能中,我启用所有数字输入并提交表单。 这是我的 CharactersContrller:

public function update(Request $request, $id)

    $character = Character::find($id);
    $character->hp=$request->input('jedna');
    $character->attack=$request->input('dva');
    $character->luck=$request->input('tri');
    $character->agility=$request->input('ctyri');
    $character->save();
    return redirect('/character');


【问题讨论】:

请出示您的路线 【参考方案1】:

好的,我明白了,小心你的 html 结构,我的表单在 &lt;table&gt; 内,但它必须在外面。就是这样,不需要 CSRF 令牌。

【讨论】:

【参考方案2】:

你应该试试这个:

你的视图文件是这样的

!! Form::model($tet, ['route' => ['characters.update', $tet->id], 'class' => 'form-horizontal', 'role' => 'form', 'method' => 'post']) !!

你的路线是这样的

Route::post('characters/update/id', 'CharactersController@update')->name('characters.update');

更新答案

请在您的表单中添加CSRF 令牌,例如:

<meta name="csrf-token" content=" csrf_token() ">

在 ajax 中添加 csrf 令牌

$.ajaxSetup(
  headers: 
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  
);

【讨论】:

这引发了错误 419,“抱歉,您的会话已过期。请刷新并重试。' @JiříZajíček:可能是您的会话已过期,请刷新并尝试 我重新启动了xampp,但还是一样,在说会话已过期的页面中,Chrome网络一般说这个请求方法:POST状态代码:419未知状态 @JiříZajíček:请查看此link 可能对您有用 将 csrf 令牌添加到表单

以上是关于Laravel Controller@update 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中使用 AJAX 数据时设置 Select2 的选定值?

GetxController 结构体

thymeleaf的常见问题汇总

函数定义中的“...args”(三个点)是啥意思?

laravel 判断 改了哪个定位

使用 laravel 安装程序创建 laravel 项目