Проблема с интерпретацией типа ресурса маршрута для модели RelatedPeople - PullRequest
1 голос
/ 05 августа 2020

Гипотеза: я думаю, что это множественное число ресурса или модели, я не уверен.

Мой код:

Route web:

Route::group(['middleware'=> 'auth'], function() {  
    Route::resource('relatedPersons', 'RelatedPeople\RelatedPeopleController')
    ->only(['store','update','destroy'])
    ->middleware('can:relatedPeoples');
});

Примечание: модель is relatedPeople, но для целей тестирования в определении маршрута оставьте это как relatedPersons.

RelatedPeople (Model):

<?php

namespace App;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

class RelatedPeople extends Model
{
    protected $fillable = [
        'name', 
        'phone',
        'email', 
        'detail',
        'case_report_id'
    ];
    
    public function getCreatedAtAttribute($value)
    {
        return Carbon::parse($value)->format('Y-m-d H:m');
    }

    public function getDetailAttribute($value)
    {
        return $value ?? "Sin detalle.";
    }
}

RelatedPeopleController:

<?php

namespace App\Http\Controllers\RelatedPeople;

use App\Http\Controllers\Controller;
use App\RelatedPeople;
use Illuminate\Http\Request;

class RelatedPeopleController extends Controller
{
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $rules = [
            'email'=> "required|unique:related_people"
        ];
        $this->validate($request, $rules);

        $relatedPeople = RelatedPeople::create($request->all());

        return response()->json($relatedPeople, 200);
    }
}

Frontend vuejs with ax ios:

onSubmit() {
    let formData = new FormData(this.$refs.create)
    formData.append('case_report_id', this.case_id)
    axios.post('relatedPersons', formData).then( (response) => {
        if ( response.status == 200 ) {
            this.$emit('addRelatedPerson', response.data)
            this.$toasterE.success("Related people create", { mark:1 })
            this.$nextTick(() => {
                this.$refs.form.reset()
                this.form = form()
            });
        }
    }).catch( (err) => {
        this.exception(err)
    })
}

Приведенный выше код каждый раз, когда я запускаю, попадает в уловку и возвращает эту ошибку: {"error": "Метод POST не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, PUT, PATCH, DELETE.", "code": 405}

Проверки, которые я уже сделал:

  1. изменить имя ресурса
  2. В модели добавить имя таблицы protected $ table = "related_people"
  3. Определите для контроллера метод get (index), чтобы знать, что по крайней мере, запрос доходит до контроллера и работает только метод GET, остальные не работают.

Я буду ke ep ищет решение, заранее спасибо.

1 Ответ

0 голосов
/ 05 августа 2020

После того, как я чуть не взорвал голову, я обнаружил, что это ошибка, что решение находится у меня на лице, не в моих бирюзовых глазах, а перед моим лицом.

Решение:

Frontend vuejs with ax ios ( before ):

onSubmit() {
    let formData = new FormData(this.$refs.create)
    formData.append('case_report_id', this.case_id)
    axios.post('relatedPersons', formData).then( (response) => {
        if ( response.status == 200 ) {
            this.$emit('addRelatedPerson', response.data)
            this.$toasterE.success("Related people create", { mark:1 })
            this.$nextTick(() => {
                this.$refs.form.reset()
                this.form = form()
            });
        }
    }).catch( (err) => {
        this.exception(err)
    })
}

Frontend vuejs with ax ios ( решено ):

onSubmit() {
    let formData = new FormData(this.$refs.create)
    formData.append('case_report_id', this.case_id)
    axios.post('/relatedPersons', formData).then( (response) => {
        if ( response.status == 200 ) {
            this.$emit('addRelatedPerson', response.data)
            this.$toasterE.success("Related people create", { mark:1 })
            this.$nextTick(() => {
                this.$refs.form.reset()
                this.form = form()
            });
        }
    }).catch( (err) => {
        this.exception(err)
    })
}

Если вы еще не видели, это определение маршрута '/ relatedPersons'

axios.post('/relatedPersons', formData).then( (response) => {

Теперь из-за этой проблемы, предположим, я обращаюсь к path ax ios .post ('relatedPeoples', data), а URL-адрес приложения - test.dev/cases/1, результатом запроса будет test.dev/cases/relatedPeoples и вот проблема.

laravel сообщает мне, существует ли маршрут, но этот метод не поддерживается.

Надеюсь, моя ошибка многим поможет.

...