Laravel和Vue.js在插入数据库时​​出现应用程序错误500

时间:2018-10-23 19:02:38

标签: mysql laravel http vue.js

我一直在努力用Vue.js / Laravel实现CRUD,并且在尝试插入数据库时​​,数据库出现500个内部服务器错误。线索不多,因为我已经尝试了几乎所有东西,包括CSRF令牌。你能提供一个线索吗?

这是我的控制器JobController

<?php

namespace App\Http\Controllers;

use App\Job;
use Illuminate\Http\Request;
use Illuminate\Http\Response;


class JobController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $jobs = Job::with('website')->get();
        return response($jobs->jsonSerialize(), Response::HTTP_OK);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $user = Auth::user()->name;
        $job = new Job();

        $job->user = $user;
        $job->website_id = $request->website;
        $job->type = $request->type;
        $job->description = $request->description;
        $job->attachment_path = '';
        $job->status = $request->status;

        $job->save();
        return response($job->jsonSerialize(),Response::HTTP_CREATED);

    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Job  $job
     * @return \Illuminate\Http\Response
     */
    public function show(Job $job)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Job  $job
     * @return \Illuminate\Http\Response
     */
    public function edit(Job $job)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Job  $job
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Job $job)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Job  $job
     * @return \Illuminate\Http\Response
     */
    public function destroy(Job $job)
    {
        //
    }
}

这是我的模范工作

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Job extends Model
{
    protected $fillable = [
        'user',
        'website_id',
        'type',
        'description',
        'attachment_path',
        'status'
    ];



    public function website(){
        return $this->belongsTo('App\Website');
    }

}

这是我的路线/api.php

<?php

use Illuminate\Http\Request;
use Illuminate\Http\Response;


Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

// Route::resource('/clients','ClientController',[
//     'except'=>['edit','show','store']
// ]);

Route::resource('/jobs','JobController',[
    'except'=>['edit','show','store']
]);

Route::post('/jobs/store','JobController@store');

Route::resource('/domains','WebsiteController',[
    'except'=>['edit','show','store']
]);

这是我的app.js

require('./bootstrap');
window.Vue = require('vue');

import Vue from 'vue'
import VueRouter from 'vue-router'
import Domains from './components/Domains'
import Jobs from './components/Jobs'

let App = require('./components/App.vue');

//building the routes
Vue.use(VueRouter);

  const routes = [ 

    {
      path:'/Jobs',component: Jobs
    },
    {
      path:'/Domains',component: Domains
    }

  ];

const router = new VueRouter({
  routes: routes,
  //mode: 'history',
})


const app = new Vue({
    el: '#app',
    router: router,
    components:{App}
});

最后,这是Job.vue组件,假定它可以执行提交任务:

<template>
    <div class="container">
         <div class="form-group">
                <input type="text" class="form-control" id="filter" placeholder="Filter the Logs">
                <i class="fas fa-plus jobs-page" @click="openAdd"></i>
            </div>
        <div class="row content-holder">
            <table>
                <thead>
                    <tr>
                        <th class="client-name">Domain</th>
                        <th class="client-pm">By</th>
                        <th class="client-pm">Type</th>
                        <th class="client-pm">Status</th>
                        <th class="client-pm">Date</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="job in jobs" :key="job.id" :job="job" class="tr-table">
                        <td class="client-name">{{ job.website.domain }}</td>
                        <td class="client-pm">{{ job.user }}</td>
                        <td class="client-pm">{{ job.type }}</td>
                        <td class="client-pm">{{ job.status }}</td>
                        <td class="client-pm">{{moment(job.created_at).fromNow()}}</td>
                    </tr>
                </tbody>
            </table>
        </div>


        <!-- This is where the insert data is comming from -->
        <div v-if="showModal" class="container">
            <div class="modal" tabindex="-1" role="dialog">
                    <div class="modal-dialog" role="document">
                        <div class="modal-content">
                        <div class="modal-header">
                            <h5 class="modal-title">Create Log</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" @click="close">
                                <i class="fas fa-plus"></i>    
                            </button>
                        </div>
                        <div class="modal-body">
                            <label for="website">Domain:</label>
                            <input v-model="job.website" name="website" type="text" id="website" class="form-control">
                            <br>
                            <label for="type">Type:</label>
                            <select  v-model="job.type" id="type" class="form-control" name="type">
                                <option>Client Update</option>
                                <option>Dev Update</option>
                                <option>Bug</option>
                                <option>Style Fix</option>
                            </select>
                            <br>
                            <label for="description">Log Description:</label>
                            <textarea v-model="job.description" class="form-control" rows="5" id="description" name="description"></textarea>
                            <br>
                            <label for="description">Tell Everyone:</label>
                            <input type="checkbox" name="tell-everyone" id="tell-everyone"><br>
                            <label for="checked">Resolved and Tested:</label>
                            <input type="checkbox" name="status" id="status" value="checked">

                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-primary" @click="save">Save</button>
                        </div>
                        </div>
                    </div>
                </div>
        </div> 
    </div>
</template>


<script>

import axios from 'axios';
import moment from 'moment';



export default {
    name: "Jobs",

    data(){
            return{
                showModal: false,              
                jobs: [],
                job: {user:'',website: '', type: '',description: '',attachment_path:'',status:''},

            }
    },

    methods: {

            openAdd(){
                this.showModal = true;
            },

            close(){
                this.showModal = false;
            },

            getJobs(){
                window.axios.get('/develogger/api/jobs').then(({data})=>{
                    data.forEach(job =>{
                        this.jobs.push(job)
                    });
                });
            },

            moment,

            save(){
                axios.post('/develogger/api/jobs/store',this.job).then((response) => {
                    this.close()

                    this.jobs.push(response.data)

                })
                    .catch((error) => this.errors = error.response.data.errors)
            }


    },        

     created(){
        this.getJobs();
    },

}
</script>

0 个答案:

没有答案