Laravel получает пустую переменную из axios.post из модуля vuie.js - PullRequest
0 голосов
/ 23 января 2019

партнеров из stackOverflow, я делаю модуль, используя laravel как backend, и vue.js от frontend, у меня есть форма для создания новой сущности, но контроллер не получает значения ¡, плз, помогите мне найти ошибку. Я собираюсь поделиться кодом.

ways.web

    //new event from API
    Route::resource('/api/events', 'EventsController', ['except' => 'show','create']);

Функция в контроллере EventsController.php

<?php

namespace soColfecar\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use soColfecar\Http\Requests\CreateEventRequest;
use soColfecar\Http\Requests\UpdateEventRequest;
use soColfecar\User;
use soColfecar\Change;
use soColfecar\Event;
use soColfecar\Event_type;
use Auth;
    public function store(Request $request)
{
    $exploded = explode(',', $request->banner);
    $decoded = base64_decode($exploded[1]);
    if(str_contains($exploded[0],'jpeg'))
        $extension = 'jpg';
    else
        $extension = 'png';
    $fileName = str_random().'.'.$extension;
    $path = public_path().'/storage/banner/'.$fileName;
    file_put_contents($path, $decoded);

    Event::create([
        'event' => strtoupper($request['event']),
        'id_event_type' => $request['id_event_type'],
        'date_init' => $request['date_init'],
        'date_end' => $request['date_end'],
        //'banner' => $fileName,
    ]);
    Change::create([
        'description' => 'Creo el  de evento:'.$request['event'].' correctamente.',
        'id_item' => 10,
        'id_user' => Auth::user()->id,
    ]);

    return redirect()->route('events.index')
        ->with('info', 'evento guardado con exito');
}

метод:

<form method="POST" v-on:submit.prevent="storeNewEvent">
                    <div class="form-group m-form__group">
                        <label for="eventTypeInput">Tipo de vento:</label>
                        <v-select :options="eventTypes"  v-model="newEvent.id_event_type" id="eventTypeInput">
                            <template slot="option" slot-scope="option">
                                {{ option.label }}
                            </template>
                        </v-select>
                        <span v-for="error in errors" class="text-danger" :key="error.error">{{ error.city_id }}</span>
                    </div>
                    <div class="form-group m-form__group">
                        <label for="inputHotelName">Nombre del Evento</label>
                        <input type="text" class="form-control" name="inputHotelName" v-model="newEvent.event" placeholder="Nombre del Evento">
                        <span v-for="error in errors" class="text-danger" :key="error.error">{{ error.hotel_name }}</span>
                    </div>
                    <div class="form-group m-form__group">
                        <label for="date_init_imput">Fecha de inicio</label>
                            <input class="form-control" type="date" v-model="newEvent.date_init" value="" id="date_init_imput">
                    </div>
                    <div class="form-group m-form__group">
                        <label for="date_end_imput">Fecha de finalizacion</label>
                            <input class="form-control" type="date" v-model="newEvent.date_end" value="" id="date_end_imput">
                    </div>
                    <div class="form-group m-form__group">
                        <label for="customFile">Banner del Evento</label>
                        <div></div>
                        <div class="custom-file">
                            <input type="file" class="custom-file-input" @change="getLogo" id="customFile">
                            <label class="custom-file-label" for="customFile">Seleccione archivo</label>
                            <span v-for="error in errors" class="text-danger" :key="error.error">{{ error.logo }}</span>
                        </div>
                    </div>

                    <hr>
                    <button type="submit" class="btn btn-info waves-effect text-left">Guardar</button>
                </form>
data() {
    return {
        changes:    [],
        eventTypes: [],
        errors:     [],
        newEvent: {
            event:          '',
            id_event_type:  '',
            date_init:      '',
            date_end:       '',
            banner:         '',
        }
    }
},
    storeNewEvent : function() {
        var url = 'api/events';
        var newEvent = this.newEvent
        axios.post(url, {event: this.newEvent}).then(response => {
            this.newEvent = {}
            this.errors = [];
            $('#new_event_modal').modal('hide');
            $('.modal-backdrop').remove();
            toastr.success('Se ha creado el evento con exito!')
        }).catch(error => {
            this.errors = error.response.data
        });
    },

И ошибка

"Слишком мало аргументов для функции soColfecar \ Http \ Controllers \ EventsController :: store (), 0 передано и ожидается ровно 1"

введите описание изображения здесь

1 Ответ

0 голосов
/ 23 января 2019

Вам нужно напечатать подсказку $request, чтобы Laravel знал, как ее заполнить («внедрение зависимостей»).

В верхней части файла:

use Illuminate\Http\Request;

Тогда для вашей функции:

public function store(Request $request) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...