因此,当我尝试访问资源控制器内的更新函数时,当我点击提交进入那里(posts/{id})时,我进入了控制器的show函数(它具有相同的路径(posts/{id}))。我如何才能进入更新路径并访问更新函数?
下面是一个带有编辑功能的视图,它将“更新”标题:
@extends('layouts.app')
@section('content')
<h1>Edit Post</h1>
<form method="get" action="/posts/{{$post->id}}">
@csrf
<input type="hidden" name="_method" value="PUT">
<input type="text" name="title" placeholder="Enter title" value="{{$post->title}}">
<input type="submit" name="submit">
</form>
@endsection
下面是控制器的update函数,它将从上层视图中获取值,并使用该id更新post:
public function update(Request $request, $id)
{
//
$post = Post::findOrFail($id);
$post->update($request->all());
return redirect('/posts');
}
这是在我点击提交后将要运行的show函数,而不是update:
public function show($id)
{
//
$post = Post::findOrFail($id);
return view('posts.show', compact('post'));
}
显示功能的视图,以备不时之需:
@extends('layouts.app')
@section('content')
<h1>{{$post->title}}</h1>
@endsection
当我点击提交时,它应该首先检查控制器的update函数,并呈现其代码,因为update函数和show函数具有相同的路径posts/{id}. x1c 0d1x
2条答案
按热度按时间uqxowvwt1#
首先,你在web.php文件中有POST路径,所以你应该这样修改表单的method标签:
删除指定方法的不可见字段,这不是它的工作方式。
接下来,我建议您使用route()函数来指定要向哪个路由发送请求,这样您就可以使用路由的名称。
在web.php文件中,必须按如下方式指定更新路径:
希望对你有帮助。
xxhby3vn2#
因此,如果你已经使用get作为show函数,则使用method=“post”代替method=“get”,因为show和update具有相同的路径:帖子/{$id}。