Javascript 获得200响应,但未命中控制器存储()方法
我正在使用axios将blade文件中的表单切换为基于vue的表单发布。我得到一个200响应,但我没有在控制器中点击store()方法。我用的是原版的刀锋。到目前为止,我尝试的方法是手动添加csrf令牌,将标题更改为内容类型multipart,将post数据更改为JSON字符串,以及更改handleSubmit以触发表单。这些似乎都没有任何效果 我的刀片文件,其中包含vue表单Javascript 获得200响应,但未命中控制器存储()方法,javascript,php,laravel,vue.js,laravel-blade,Javascript,Php,Laravel,Vue.js,Laravel Blade,我正在使用axios将blade文件中的表单切换为基于vue的表单发布。我得到一个200响应,但我没有在控制器中点击store()方法。我用的是原版的刀锋。到目前为止,我尝试的方法是手动添加csrf令牌,将标题更改为内容类型multipart,将post数据更改为JSON字符串,以及更改handleSubmit以触发表单。这些似乎都没有任何效果 我的刀片文件,其中包含vue表单 @extends('layouts.app') @section('content') <div class
@extends('layouts.app')
@section('content')
<div class="container">
<create-post></create-post>
</div>
@endsection
在我的postsController中的store方法中,我设置了一个console.log,只是为了查看我是否正在点击它,而看起来我没有
class PostsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function create()
{
return view('posts/create');
}
public function store()
{
console.log('hit store method');
//VALIDATES DATA
$data = request()->validate([
'caption' => 'required',
'image1' => ['required', 'image',],
'image2' => 'image',
'image3' => 'image',
'image4' => 'image',
'image5' => 'image',
]);
//CREATE IMAGES ARRAY AND UPLOADS TO S3
$imageArray = [];
$imageCount = 1;
foreach($data as $key => $value){
if (strpos($key, 'image') !== false) {
$imagePath = request('image' . $imageCount)->store('uploads', 's3');
$imageCount ++;
array_push($imageArray, 'https://instagrizzle-development.s3.amazonaws.com/' . $imagePath);
}
}
//Relational method HARDCODED profile
auth()->user()->profiles[0]->posts()->create([
'caption' => $data['caption'],
'image' => json_encode($imageArray),
]);
return redirect('/profile/' . auth()->user()->profiles[0]->id);
}
}
添加
action='/p' enctype="multipart/form-data" method="post"
到表单标签似乎多余,但我想我会试试。也不确定,但axios是否默认自动添加csrf令牌?任何帮助都将不胜感激。提前谢谢
这是我提交表格后得到的回复
看起来你拿错了中卫 auth,而不是控制器构造函数中的auth:api 见: 您也可能在axios调用中遗漏了一些标题,您可以在中进行验证 你的浏览器,如果他们都在那里 还要验证您的DOM中是否有csrf令牌 然后,您可以使用包装器Axios对象来设置默认标题 像这样。(例如保存到api.js) 然后将axios导入vue组件
import Api from './api';
然后你可以像axios对象一样使用它
Api().request()
或者,如果您将通过所有axios调用使用这种单一身份验证方式。您只需按照laravel在其引导文件中开始的方式进行操作
像这样:
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
将其替换为返回“ok”;。console.log()是javascript,它在php中不起作用–Porloscerosψ11月28日23:37在你的laravel控制器中?只是为了得到一些反馈,我确实在使用存储方法,我有一个dd(response());之前但由于我在提交按钮上有.prevent,我想我可能看不到它替换为
返回'ok'代码>console.log()
是javascript,它在PHP中不起作用,您可以尝试在auth中间件上方的控制器构造函数中使用log::info(“”)或dd()
import Api from './api';
Api().request()
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';