Laravel Destroy选项不删除

时间:2016-09-10 00:09:28

标签: php laravel laravel-5 laravel-routing

为什么会这样?这是我所有帐户的索引列表。我想删除该category.destroy路由的特定类别,但它是

index.blade.php

@extends('layouts.master')
@section('title','All Categories')
@section('contents')
<div class="row">
    <div class="col-md-8 col-sm-4 col-md-offset-2">
        <div class="panel panel-default">
            <div class="panel-heading">All Categories</div> 
            <div class="panel-body">
                <article>
                    <div class="table-responsive-vertical shadow-z-1">
                        <!-- Table starts here -->
                        <table id="table" class="table table-hover table-mc-light-blue">
                            <thead>
                                <tr>
                                    <th>ID No</th>
                                    <th>Category</th>
                                    <th>Edit/Delete</th>
                                    <th>Status</th>
                                </tr>
                            </thead>
                            @foreach($categories as $category)
                            <tbody>
                                <tr>
                                    <td data-title="ID">{{$category->id}}</td>
                                    <td data-title="Name">{{$category->name}}</td>
                                    <td><a href="{{ route('category.edit',$category->id)  }}" class="btn btn-primary btn-sm pull-left">Edit</a>
                                        &nbsp<a href="{{ route('category.destroy', $category->id)  }}" class="btn btn-danger btn-sm">Delete</a>
                                    </td>

                                </tr>         
                            </tbody>
                            @endforeach
                        </table>
                    </div>
                </article>

            </div>
        </div>
    </div>
</div>
@endsection
@section('js') 
{!!Html::script('assets/js/jquery.min.js')!!} 
{!!Html::script('assets/js/bootstrap.min.js') !!}
<script>
    $('#flash-overlay-modal').modal();
</script>

<script>
    $('div.alert').not('.alert-important').delay(3000).fadeOut(350);
</script>
@endsection

CategoryController.php

public function destroy($id){
        $category = Category::findOrFail($id);
        $category->delete();
        Session::flash('flash_message', 'Task successfully deleted!');
        return redirect()->route('category.index');
    }

相反,它只显示该类别的视图特定条目。这不是删除或其他东西

2 个答案:

答案 0 :(得分:2)

要访问您的销毁路由,您必须使用DELETE HTTP请求动词。 HTML链接仅允许GET请求。

您应该将HTML链接更改为spoofs DELETE方法的HTML表单,或者使用restfulizer.js之类的内容来自动将删除链接转换为删除表单。

正如已经建议的那样,您还可以为删除功能创建GET路由,但这可能会对此产生影响。 GET和HEAD请求通常应被视为“只读”请求,不应修改任何数据。 POST,PUT,PATCH和DELETE请求通常被认为是“写”请求。网络蜘蛛可能会抓取您的删除链接并最终删除所有数据,或者网络浏览器可能会预先获取页面上的所有GET请求,因此即使没有人点击删除按钮,也会访问删除链接。当您开始允许GET请求修改数据时,可能会发生许多潜在的令人讨厌的事情。 this answer中有一些很好的信息。

答案 1 :(得分:1)

尝试这条路线:

Route::get('category/{category}/destroy',[
  'uses'=>'CategoryController@destroy',
  'as' => 'category.destroy'
]);