我使用laravel 5.4作为后端,并使用Vue.js作为前端。我将使用Vue将值传递给Controller并存储数据。但是当我检查控制台时,响应显示错误
不推荐自动填充
$HTTP_RAW_POST_DATA
在将来的版本中删除。
我使用的服务器是WAMPServer 3.0.6。
我发现解决方案是更改php.ini,$HTTP_RAW_POST_DATA=-1
,但仍然有错误。
那还有另一个解决方案吗?
这是我的Vue代码
<script>
export default {
mounted(){
},
data() {
return {
content :'',
not_working: true
}
},
methods:{
create_post() {
this.$http.post('/create/post', { content:this.content })
.then((resp)=> {
this.content = ''
noty({
type: 'success',
layout: 'bottomRight',
text: 'Your post has been posted.'
});
console.log(resp)
})
}
},
watch :{
content(){
if(this.content.length > 0)
this.not_working = false
else
this.not_working= true
}
}
}
我的控制器
public function store(Request $request){
return Post::create([
'body' => $request->content,
'user_id' => Auth::id()
]);
}
更新: 在我从互联网上研究之后,看起来问题已经解决了,但是出现了新的问题,这就是
TokenMismatchException
我加入了<meta name="csrf-token" content="{{ csrf_token() }}">
但仍然有这个错误,我现在该怎么办?
答案 0 :(得分:1)
因为我懒得找到一种方法将令牌添加到vue资源函数中。然后我只需将其更改为axios,因为它可以避免此错误。所以我只是改变
this.$http.post('/create/post', { content:this.content })
到
axios.post('/create/post', { content:this.content })
然后它可以解决csrf-token问题。我认为这只适用于laravel 5.4,因为它是预定义的。
答案 1 :(得分:0)
此问题的解决方案是在您的请求中附加正确的标头, 这是适当的帖子请求和正确的标题,我已经测试了自己,它正在工作。
var config = {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
};
axios.post('/user', {}, config)
.then((response)=>{
console.log(response)
}).catch((error)=>{
console.log(error.response.data)
});
我希望服务器能够很好地对待您并且不会返回有关 HTTP_RAW_POST_DATA 的警告。
答案 2 :(得分:0)
trusted_hosts: ['192.168.43.218', '192.168.43.218']
// im使用laravel 5.4 vue js 2,无需附加适当的标头。只需添加 toFormData 。