weixin_33739523 2015-08-22 23:05 采纳率: 0%
浏览 70

laravel删除不起作用

I am wondering how to put a csrf token in a form so that delete will work?

Here is my code:

Route:

Route::delete('category_delete/{id}',['as'=>'category_delete','uses'=>'CategoryController@destroy']);

index.blade.php

@section('adminContent')
{!! Form::token() !!}
<div class="table-responsive art-content">
    <table class="table table-hover table-striped">
        <thead>
        <th> NAME</th>
        <th> ACTIONS</th>
        </thead>
        <tbody>
        @foreach($categoriesView as $category)
            <tr>
                <td>{!! $category->name!!}</td>
                <td>{!! link_to_route('categories.edit', '', array($category->id),array('class' => 'fa fa-pencil fa-fw')) !!}</td>
                <td><button type="button" id="delete-button" class="delete-button" data-url = "{!! url('category_delete')."/".$category->id !!}"><i class="fa fa-trash-o"></i></button>
            </td>
            </tr>
        @endforeach
        </tbody>
    </table>
    <div class="pagination"> {!! $categoriesView->render() !!}</div>
</div>

@stop

CategoryController:

 public function destroy($id,Category $category)
{

    $category = $category->find ( $id );
    $category->delete ();
    Session::flash ( 'message', 'The category was successfully deleted!.' );
    Session::flash ( 'flash_type', 'alert-success' );
}

If I used ajax, javascript or jquery, how should the code be?

  • 写回答

1条回答 默认 最新

  • weixin_33722405 2015-08-23 00:18
    关注

    Using jquery I would do something like the following.
    Add the line below in the header of your home view
    <meta name="csrf-token" content="{{ csrf_token() }}" />
    Now in your javascript


    function deleteMe(button)
       {
         // You might want to put the ajaxSetup function where it will always load globally.
         $.ajaxSetup({
             headers: {
                 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
             }
      });
    
       if(confirm("Are you sure?"))
       {
           $.get(
               'category_delete/'+button.id,
               function( response )
               {
                   // callback is called when the delete is done.
                   console.log('message = '+ response.message);
               }
           )
       }
      }
    

    In index.blade.php, make your id more specific.
    ... <td><button type="button" id=".$category->id" class="delete-button" data-url = "{!! url('category_delete')."/".$category->id !!}"><i class="fa fa-trash-o" onlick="deleteMe(this);></i></button> ...

    In your controller

    public function destroy($id,Category $category){
         $category = $category->find ( $id );
         $category->delete ();
    
        return response()->json(
            'message' => 'Deleted', 
          )
    
    }
    


    Note: No need to add
    Form::token in your view
    Hope this helps.....


    Updated...........

    If you were to do it using laravel only, I will suggest you use a link rather than the button you are using.

    In index.blade.php, make your id more specific.
    ... <td><a href="category_delete/".$category->id class="delete-button" data-url = "{!! url('category_delete')!!}"><i class="fa fa-trash-o"></i></td> ...
    In your controller

    public function destroy($id,Category $category){
        $category = $category->find ( $id );
        $category->delete ();
    
       return view('index');//important.
    
    }
    



    If you want your link to look like a button, use css or a css framework like bootstrap That should be it. hope this helps again.

    评论

报告相同问题?