Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中单击一个按钮将用户ID添加到帖子中会出现一个错误,即“添加用户ID”;“不支持Post方法”;_Php_Mysql_Laravel_Post - Fatal编程技术网

Php 在Laravel中单击一个按钮将用户ID添加到帖子中会出现一个错误,即“添加用户ID”;“不支持Post方法”;

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

在这个应用程序中,我有一个用户表和一个Posts表

在单个贴片(post/{id})中,我有一个名为“拾取任务”的按钮。单击时,它应该将$post->user设置为当前用户的ID。我已经按照当前文档设置了所有内容,但它仍然给我错误:“此路由不支持post方法。支持的方法:GET,HEAD。”

这是我的密码:

后刀片中的按钮

<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.');
}