Php 在Laravel中单击一个按钮将用户ID添加到帖子中会出现一个错误,即“添加用户ID”;“不支持Post方法”;
在这个应用程序中,我有一个用户表和一个Posts表 在单个贴片(post/{id})中,我有一个名为“拾取任务”的按钮。单击时,它应该将$post->user设置为当前用户的ID。我已经按照当前文档设置了所有内容,但它仍然给我错误:“此路由不支持post方法。支持的方法:GET,HEAD。” 这是我的密码: 后刀片中的按钮Php 在Laravel中单击一个按钮将用户ID添加到帖子中会出现一个错误,即“添加用户ID”;“不支持Post方法”;,php,mysql,laravel,post,Php,Mysql,Laravel,Post,在这个应用程序中,我有一个用户表和一个Posts表 在单个贴片(post/{id})中,我有一个名为“拾取任务”的按钮。单击时,它应该将$post->user设置为当前用户的ID。我已经按照当前文档设置了所有内容,但它仍然给我错误:“此路由不支持post方法。支持的方法:GET,HEAD。” 这是我的密码: 后刀片中的按钮 <form action="update" method="POST"> @csrf <in
<form action="update" method="POST">
@csrf
<input type="hidden" name="user_id" value="{{Auth::user()->id}}"/>
<input type="hidden" name="task_id" value="{{ $task->id }}"/>
<button class="btn btn-outline-secondary" type="submit" value= "UPDATE" href="#">➕ Pick up Task</button>
</form>
我的路线(web.php)
试一试
Route::POST('update', 'PostController@update');
到web.php文件顶部,然后清除路由缓存,更改代码
<form action="/update" method="POST">
(更新前添加斜杠)并尝试您的代码,因为您被发送到了错误的URI 将您的
表单
标签更改为:
<form action="" method="POST">
通过以下方式更正更新控制器方法以使用参数:
我还假设您将task\u id
与Post模型的id混淆,因为您是通过该请求变量获取Post的?通过使用模型绑定并通过请求对象访问用户,您可以将控制器方法归结为以下内容:
public function update(Request $request, Post $post)
{
$post->update(['user' => $request->user()->id]);
return redirect('/')->with('success', 'You picked up a new task.');
}
如果不存在,模型绑定将自动返回404。您确定表单操作将您发送到正确的路由吗?运行php artisan route:list时,您的路由是否正确显示?您是否尝试了Route::post(…)
而不是Route::post(…)
?我不确定如何检查表单操作是否将我发送到正确的路由(据我所知)。当我执行route:list
-它显示POST | update |PostController@update| web,auth
。小写字母也给了我同样的问题。@Repox我如何验证表单操作是否将我发送到正确的路由?@cslem好的,当你按下提交按钮时,它实际上发送到了什么路由(它生成了什么URL)?您当前建议提交到http://example.com/update
,但当您按submit时,这是您发送到的URL吗?请尝试move Route::POST('update','PostController@update'); 到web.php文件的顶部,然后清除路由缓存,更改代码(在更新之前添加斜杠),然后尝试您的代码!我现在得到错误“将[0]添加到可填充属性以允许对[App\Posts]进行批量分配”`给我看看你的贴子模型,也许你没有设置可填充阵列谢谢你!我学到了很多,我真的很感激。这是我的帖子模型:class Posts扩展了模型{//Table,与模型保护的$Table='Posts';公共函数user(){return$this->belongsTo('App\user','user');}}
如果Posts表中有列user,则需要在帖子模型中添加属性protected$filleble=['user'];您好,谢谢您-我已经按照下面的建议完成了工作,但我肯定会尝试按照您上面列出的方式重构我的代码。一些问题。如果视图路由当前是route::get('/post/{id}',,则“update”的新路由将是什么样子PostController@view')->name('task')代码>我知道我有不好的命名约定(在post和task之间切换),但是task_id拉的是我在上面的路由中看到的相同的{id}。这会改变什么吗?
<form action="" method="POST">
Route::get('post/{post}', 'PostController@show'); // For viewing
Route::post('post/{post}', 'PostController@update'); // For updating
public function update(Request $request, Post $post)
{
$user = request('user_id');
$task = request('task_id');
//Fill Post User
$selectedtask = Posts::findOrFail($task);
$selectedtask->update(['user', $user]);
//Success
Session::flash('success', 'You picked up a new task.');
return view('/');
}
public function update(Request $request, Post $post)
{
$post->update(['user' => $request->user()->id]);
return redirect('/')->with('success', 'You picked up a new task.');
}