2017-11-17 11 views
5

から削除するには、リソースのルートを使用してレコードを削除します:Laravelリソースルートaxios

public function destroy(Positions $positions) { 
    return $positions; 
} 

しかし、上記は常に「メソッドが許可されていません」を返します。 axios delete()メソッドで削除要求を処理するにはどうすればよいですか?

+0

"レコードを削除するようにAxiosを設定したい..." しかし、 '$ positions'は複数のレコードを削除することを意味しますか? 単一のリソースまたは複数のリソースを削除しようとしているかどうかを明確にすることはできますか? – Traxo

+0

@CyRossignolこれは問題を解決してくれてありがとう –

答えて

4

LaravelはMethodNotAllowedHttpExceptionスロー願っています。 JavaScriptコードがのみPOSTリクエストをGET サポートしていることの経路によって処理され/job‑managementのパスとURLに DELETE要求を送信するため、この質問のケースでは、このエラーを参照してください。私たちは、URLを、Laravelが手抜きのコントローラに期待している従来のフォーマットに変更する必要があります。

私たちが間違ったURLにリクエストを送信しているという事実が隠れているので、エラーが混乱しています。理由を理解するために、(documentationから)Route::resource()によって作成されたルートを見てみましょう:

Verb  URI        Action Route Name 
GET   /job-management     index job-management.index 
GET   /job-management/create   create job-management.create 
POST  /job-management     store job-management.store 
GET   /job-management/{position}  show job-management.show 
GET   /job-management/{position}/edit edit job-management.edit 
PUT/PATCH /job-management/{position}  update job-management.update 
DELETE  /job-management/{position}  destroy job-management.destroy 

以上のように、/job-managementのパスコンポーネントを有するURLはドン」コントローラのindex()store()メソッドに渡されますハンドル要求を削除します。これが例外を見る理由です。

が質問に示すよう DELETE要求を実行するために、我々は {position}は、我々は、削除したい位置モデルのIDで /job-management/{position}、のようなパスをURLにリクエストを送信する必要があります。 JavaScriptコードは次のようになります。

axios.delete('/job-management/5', this.deletedata).then((res) => { ... }) 

私は、概念を明確に示すためにURLに位置IDをハードコードしました。しかし、我々は、おそらく、このIDのための変数を使用する:このフォームで

let positionId = // get the position ID somehow 
axios.delete(`/job-management/${positionId}`, this.deletedata).then((res) => { ... }) 

URLをルーティングするために、コントローラのdestroy()方法にDELETE要求をLaravelを可能にします。上記の例ではES6 template string literalsが使用されています。このコードは、この機能をサポートするバージョンのJavaScriptを使用していることを示しているためです。テンプレート文字列の前後には、標準引用符の代わりにバッククォート(`)を配置することに注意してください。

3

上記のコードでは、destroyメソッドのパラメータとしてPositionsの雄弁を渡しますが、vueJSではこのオブジェクトを渡さないでください。そのためにあなたは、このようにそれを渡します。削除ウルaxiosのURL内部

axios.delete('/job-management/${id}').then((res)=>{ 
    console.log(res); 
}) 

とID PARAM、それはデータまたは任意のシンクタンクの対象とすることができます。

は、私たちは、ルートがサポートされていないHTTP動詞を使用してルートに要求を送信しようとすると、このヘルプはあなたが

関連する問題