Javascript 获得200响应,但未命中控制器存储()方法

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

我正在使用axios将blade文件中的表单切换为基于vue的表单发布。我得到一个200响应,但我没有在控制器中点击store()方法。我用的是原版的刀锋。到目前为止,我尝试的方法是手动添加csrf令牌,将标题更改为内容类型multipart,将post数据更改为JSON字符串,以及更改handleSubmit以触发表单。这些似乎都没有任何效果

我的刀片文件,其中包含vue表单


@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';