私はvueフォームを含むテンプレートを持っています:
_<form id="logout-form" :action="href" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
_
Laravelでは、フォームにはcsrf_field()が定義されている必要があります。しかし、vueコンポーネント内では、ステートメント{{ csrf_field() }}
は、私のvueインスタンスに_csrf_field
_という名前のメソッドがあり、私はそれを呼んでいます。
この状況でcsrf_fieldを追加するにはどうすればよいですか?
ヘッダーのメタタグにトークンがある場合(ビュー)
<meta name="csrf-token" content="{{ csrf_token() }}">
を使用してトークンにアクセスできます
data() {
return {
csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content')
}
}
そして、フォーム内に非表示の入力フィールドを追加し、csrfプロパティを次のように値にバインドします。
<form id="logout-form" :action="href" method="POST" style="display: none;">
<input type="hidden" name="_token" :value="csrf">
</form>
これは私がそれを使う方法です:
{!! csrf_field() !!}
それをフォームに入れてください。
vueスクリプトでは簡単にできます
methods: {
submitForm: function(e) {
var form = e.target || e.srcElement;
var action = form.action;
フォームと彼のアクションを取得すると、データ値は次のようになります。
data: $(form).serialize()
これは私にとっては完璧に機能し、エラーはまったく発生しません。
AjaxリクエストにVue2でaxiosを使用している場合は、次のコードを追加できます(通常はbootstrap.jsファイルにあります)。
window.axios.defaults.headers.common = {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
'X-Requested-With': 'XMLHttpRequest'
};