【问题标题】:404 not found for laravel for delete form404 not found for laravel for delete form
【发布时间】:2020-09-13 07:25:46
【问题描述】:

这是控制器页面!

  /**
     * 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

【问题讨论】:

  • 让你和矮人冠军在一起?我在 github 分支上看到了你的名字

标签: laravel forms


【解决方案1】:

DELETE 请求不同于 GETPATCH。对于删除路由,您应该改用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

请注意,您可以只使用resourceful routes,您将获得资源丰富的控制器所需的所有路由。然后,无需手动指定每条路线,只需执行

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

【讨论】:

  • 我迟到了xD
【解决方案2】:

建议使用删除Route::delete('/page/{URI}','PageController@destroy');

Route::delete('/page/{URI}','PageController@destroy')->name('page.destroy');
Route::get('/page/{URI}','PageController@show')->name('page.show');
Route::get('/page/{URI}/edit','PageController@edit')->name('page.edit');
Route::patch('/page/{URI}','PageController@update')->name('page.update');

这里假设您在控制器中使用模型绑定:

@foreach($pages as $page)
<tr>
    <td><a href="{{route('page.show', $page)}}">{{$page->title}}</a></td> //guessing this is page_show
    <td><a href="{{route('page.show', $page)}}">{{$page->URI}}</td> //guessing this is page_show 
    <td><a href="{{route('page.edit', $page)}}">Modify</a></td>
</tr>
@endforeach

使用最后一列删除数据,如下所示:

<td>
  <form action="{{route('page.destroy', $page)}}" method="POST" 
    onsubmit="return confirm('delete data?');">
    {{csrf_field()}}
    {{method_field('delete')}}
    <input type="submit" value="delete">
  </form>
</td>

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多