2017-02-20 42 views
0

Я пытаюсь сделать простой POST с помощью VueJS 2 (с аксиомами) и Laravel 5.3. Мой метод всегда возвращает пустой массив, когда я пытаюсь напечатать $request->all().VueJS и Laravel - всегда необходимо отправить запрос

У меня есть следующий мета-тег в моем шаблоне лезвия:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

я загружаю AXIOS и добавив тег X-CSRF к нему в bootstrap.js:

window.Vue = require('vue'); 
window.axios = require('axios'); 

require('vue-axios'); 

window.axios.defaults.headers.common['X-CSRF-Token'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content') 

И это является моим компонентом Vue (сокращенно для ясности):

<template> 
    <div class="options"> 
     <div class="save-result" @click="saveResult()"> 
      Save result 
     </div> 
    </div> 
</template> 

<script> 
    export default { 
     methods: { 
      saveResult: function() { 
       axios.post('/api/user/save-results', {'test': 'testing'}).then(response => { 
        console.log(response.message) 
       }) 
      } 
     } 
    } 
</script> 

Этот маршрут ведет к очень простому контроллеру, где я просто печать моего запроса, который пуст.

public function saveResults(Request $request) 
{ 
    echo '<pre>'; print_r($request->all()) and die(); 
} 

Я угадываю, что что-то отсутствует с настройкой заголовка CSRF, но я не уверен, что это может быть.

+0

У Вашего сдаваемая вкладки сети в консоли браузера, чтобы посмотреть, какие данные передаются? –

+0

Оказывается, проблема заключалась в том, что я отправлял «обычный» массив в качестве второго параметра постсотового метода axios, и он должен быть объектом. Я отправлю ответ ниже. Я не уверен, почему это неявно настроено, хотя любая идея почему? – Anonymous

ответ

1

Оказывается, проблема заключалась в отправке массива в качестве второго параметра метода postios post, и он должен быть объектом.

я воспользовался 6 polyfill ECMAScript, Object.assign:

let params = Object.assign({}, this.$store.getters.params) 

axios.post('/api/user/save-results', params).then(response => { 
    console.log(response.message) 
})