Клонирование предмета. Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь клонировать модель, но при попытке получить ошибку в названии. Это то, что я делаю

Кнопка в vue. js

<a class="btn-link-clone action-button" :href="'survey/clone/'+scope.row.id">
    <i class="fas fa-clone col-margin"></i>
</a>

Маршрут в сети. php

Route::post('survey/clone/{id}', 'SurveyController@cloneSurvey');

CloneSurvey в SurveyController

public function cloneSurvey($id)
{
    $survey = Survey::findOrFail($id);
    DB::beginTransaction();

    $now = Carbon::now();
    $activePeriod = Period::whereDate('start_date', '<=', $now)
        ->whereDate('end_date', '>=', $now)->get();
    $clone = new Survey();
    $clone->fill($survey->toArray());
    $clone->name .= ' Clonado';
    $clone->save();

    $eval = Evaluation::findOrFail($clone->id);
    if (empty($eval)) {
        $eval = new Evaluation();
    }
    $eval->survey_id = $clone->id;
    if (!empty($activePeriod)) {
        $eval->init_date = $activePeriod->start_date;
        $eval->end_date = $activePeriod->end_date;
    }
    $report = $activePeriod->end_date;
    $date = strtotime($report);
    $date = strtotime('+ 1 week', $date);
    $eval->report_date = $date;
    $eval->save();

    $questions = $survey->surveyQuestions()->get()->pluck('survey_question_id')->toArray();
    if (count($questions) > 0) {
        $clone->surveyQuestions()->sync($questions);
    }

    DB::commit();
    return back();
}

Что делает это возможным?

Я также пробовал эту кнопку в vue. js

<div class="btn-link-clone action-button"
    @click="clone(scope.row)">
    <i class="fas fa-clone col-margin"></i>
</div>

методе в vue . js

clone(row) {
    this.$http.post('survey/clone/' + row.id)
        .then(
            () => {
                this.surveys = this.$page.surveys;
         },
         (res) => {}
    )
},

с тем же маршрутом, и я получаю 419 (неизвестный статус)

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Вам нужен Route, чтобы использовать метод get вместо метода post. Например:

Route::get('survey/clone/{id}', 'SurveyController@cloneSurvey');

Когда пользователь нажимает на ссылку, это почти всегда запрос GET.

EDIT :

Основываясь на комментариях, я согласен, что изменения не должны быть сделаны через запрос get в любом случае. Этот пример должен быть POST запрос.

Ваш Vue компонент:

<template>

...

<form>
    <button 
        class="btn-link-clone action-button" 
        @click.prevent="submit(scope.row.id)"
    >
            <i class="fas fa-clone col-margin"></i>
    </button>
</form>

...

</template>

<script>
export default {

...

methods: {
    submit (id) {
        // use whatever http request library you choose to execute POST HTTP request.
    }
}

...


</script>

В качестве альтернативы, вы можете использовать @submit.prevent в теге form вместо @click.prevent на button.

Тогда, пока на внешнем интерфейсе определено scope.row.id, вы можете использовать:

Route::post('survey/clone/{id}', 'SurveyController@cloneSurvey');
1 голос
/ 15 января 2020

Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST

Вы делаете GET запрос к Route, который поддерживает только метод POST.

Либо ваше приложение vue делает ajax запрос на ваш сервер с отсутствующими заголовками или неправильная форма действия.

Вы также можете передавать что-то вроде параметра GET как часть вашего запроса

т.е. http://my-app/api/example?var1=asdasdasdas

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...