php 无法访问控制器Laravel的更新功能

pgccezyw  于 2022-11-21  发布在  PHP
关注(0)|答案(2)|浏览(152)

因此,当我尝试访问资源控制器内的更新函数时,当我点击提交进入那里(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

uqxowvwt

uqxowvwt1#

首先,你在web.php文件中有POST路径,所以你应该这样修改表单的method标签:

<form method="POST">

删除指定方法的不可见字段,这不是它的工作方式。

<input type="hidden" name="_method" value="PUT">

接下来,我建议您使用route()函数来指定要向哪个路由发送请求,这样您就可以使用路由的名称。

<form method="POST" action="{{ route('posts.update', ['id' => $post->id]) }}">

在web.php文件中,必须按如下方式指定更新路径:

Route::post('update/{id}', [PostsController::class, 'update'])->name('posts.update');

希望对你有帮助。

xxhby3vn

xxhby3vn2#

因此,如果你已经使用get作为show函数,则使用method=“post”代替method=“get”,因为show和update具有相同的路径:帖子/{$id}。

相关问题