【问题标题】:Problem with interpreting route resource type for the RelatedPeople model为 RelatedPeople 模型解释路线资源类型的问题
【发布时间】:2020-11-25 18:56:26
【问题描述】:

假设:我认为是资源或模型的多元化,我不确定。

我的代码:

路由网络:

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

注意:模型是relatedPeople,但出于测试目的,在定义路线时将其保留为relatedPersons。

相关人员(模型):

<?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);
    }
}

用 axios 前端 vuejs:

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)
    })
}

上面的代码每次运行时都会进入catch并返回这个错误: {"error": "该路由不支持POST方法。支持的方法有:GET、HEAD、PUT、PATCH、DELETE。", "code": 405}

我已经完成的测试:

  1. 更改资源名称
  2. 在模型中添加表名 protected $ table = "related_people"
  3. 给控制器定义一个get(index)方法,让控制器知道至少请求到达了控制器,只有GET方法起作用,其余的不起作用。

我会继续寻找解决方案,在此先感谢您。

【问题讨论】:

    标签: vue.js axios laravel-7


    【解决方案1】:

    好吧,在我的头几乎要爆炸之后,我发现解决方案在我的脸上是一个错误,而不是在我绿松石色的眼睛里,而是在我的面前。

    解决办法是:

    用 axios 前端 vuejs(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)
        })
    }
    

    前端 vuejs 与 axios(已解决):

    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) => {
    

    现在因为这个问题,假设我访问路径 axios.post('relatedPeoples', data) 并且应用程序的 url 是 test.dev/cases/1,请求的结果是 test.dev/案例/相关人员和这里的问题。

    laravel 告诉我路由是否存在但不支持该方法。

    我希望我的错误能帮助很多人。

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 2016-03-30
      • 2010-09-19
      • 2018-11-09
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多