2016-09-10 9 views
1

これはなぜ発生するのですか?これはすべてのアカウントのインデックスリストです。私はちょうどそのcategory.destroy経路によって、特定のカテゴリを削除したいが、それはLaravel 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'); 
    } 

代わりに、それだけでビュー特定のエントリを表示しますカテゴリのこれは、削除したり、何か

+0

破壊ルートが 'GET'ではなく' DELETE'なので、実際にはそのルートにアクセスしていないので、実際には破壊ルートに小さなフォームを作成する必要がありますフォームアクションを実際のルートにトリガするためにボタンを使用します。 –

答えて

1

このルートを試してみてくださいいない:

Route::get('category/{category}/destroy',[ 
    'uses'=>'[email protected]', 
    'as' => 'category.destroy' 
]); 
+0

ありがとうございました – d3cypher

+0

@ A.Sandこれはうまくいくかもしれませんが、GETリクエストは「読み込み専用」であるはずです。おそらく、GETリクエストによるデータの変更の許可を開始したくないでしょう。リソース定義によって作成された適切なDELETEルートにアクセスする方がよいでしょう。 – patricus

+0

@patricusええ、それは安全ではありませんが、彼が管理者ユーザーのような認証によって要求を守るのは同じ脆弱性ですか? – maudev

2

あなたの破壊のルートにアクセスするには、DELETE HTTP要求動詞を使用する必要があります。 HTMLリンクはGET要求のみを許可します。

HTMLリンクをspoofs DELETEメソッドのHTMLフォームに変更するか、restfulizer.jsのように見て削除リンクを自動的にフォームを削除するように変更する必要があります。

これまで提案されているように、削除機能のためのGETルートを作成することもできますが、これには潜在的な影響があります。 GET要求とHEAD要求は一般に「読み取り専用」要求とみなすべきであり、データを変更しないでください。 POST、PUT、PATCH、およびDELETE要求は、一般に「書き込み」要求とみなされます。 Webスパイダーがあなたの削除リンクをクロールしてすべてのデータを削除するか、Webブラウザがページ上のすべてのGET要求を先取りして、誰も削除ボタンをクリックしなくても削除リンクにアクセスする可能性があります。 GETリクエストでデータを変更できるようになると、起こりうる厄介なことがたくさんあります。 this answerにはいくつかの良い情報があります。

関連する問題