首页 > 解决方案 > 404 not found for laravel for delete form

问题描述

这是控制器页面!

  /**
     * Remove the specified resource from storage.
     *
     * @param \App\URI $URI
     * @return \Illuminate\Http\Response
     */
    public function destroy(URI $URI)
    {
        $URI->deleted();
        return redirect('/p');
    }

这是下面的路线!

    Route::patch('/page/{URI}','PageController@destroy');

这是下面的刀片页面代码

@foreach($pages as $page)
<tr>
    <td><a href="/page/{{ $page->URI }}">{{$page->title}}</a></td>
    <td><a href="/page/{{ $page->URI }}">{{$page->URI}}</td>
    <td><a href="/page/{{ $page->URI }}/edit">Modify</a></td>
    <td><a href="{{url('deletePage')}}">Delete</a></td>
</tr>
@endforeach

标签: laravelforms

解决方案


DELETE请求与和GET不同PATCH。对于删除路由,您应该改用DELETE路由方法,并使用该方法提交表单DELETE。您还应该为您的路线定义一个名称,以便您可以使用命名路线。

路线应该是

Route::delete('/page/{URI}', 'PageController@destroy')->name('page.destroy')";

然后你需要让你的删除按钮提交一个表单。

@foreach($pages as $page)
    <tr>
        <td><a href="/page/{{ $page->URI }}">{{$page->title}}</a></td>
        <td><a href="/page/{{ $page->URI }}">{{$page->URI}}</td>
        <td><a href="/page/{{ $page->URI }}/edit">Modify</a></td>
        <td>
            <form method="POST" action="{{ route("page.destroy", $URI) }}">
                @csrf
                @method("DELETE")
                <input type="submit" value="Delete" />
            </form>
            <!-- <a href="{{url('deletePage')}}">Delete</a> -->
        </td>
    </tr>
@endforeach

请注意,您可能只是使用资源丰富的路由,并且您将获得资源丰富的控制器所需的所有路由。然后,不要手动指定每条路线,只需执行

Route::resource('page', 'PageController');

Laravel 将为您处理剩下的事情,并为您提供 RESTfull 控制器所需的所有路由。

然后你也可以在你的表中使用命名路由,

@foreach($pages as $page)
    <tr>
        <td><a href="{{ route("page.show", $URI) }}">{{$page->title}}</a></td>
        <td><a href="{{ route("page.show", $URI) }}">{{$page->URI}}</td>
        <td><a href="{{ route("page.edit", $URI) }}">Modify</a></td>
        <td>
            <form method="POST" action="{{ route("page.destroy", $URI) }}">
                @csrf
                @method("DELETE")
                <input type="submit" value="Delete" />
            </form>
        </td>
    </tr>
@endforeach

推荐阅读