首页 > 解决方案 > Laravel 5.7:更新方法返回“无消息”

问题描述

我已经尝试了一切,但我无法弄清楚我的错误在哪里。

update() 方法不会更新任何内容,我只会返回“无消息”错误...

这是 web.php 中的路由:

Route::get('/user/edit/{id}', ['as' => 'users.edit', 'uses' => 'UserAdController@edit']); Route::post('/user/update/{id}', ['as' => 'users.update', 'uses' =>'UserAdController@update']);

视图 users/edit.blade.php :

<div class="container">
        <br>
        <h3>Edit your ad</h3>
        <br>

        <form method="post" action="{{route('users.update', $ad->id)}}">
            <input name="_method" type="hidden" value="PATCH">
            {{ method_field('post') }}
            <div class="form-group">
                <label for="title">Title</label>
                <input type="text" name="title" class="form-control" id="title" value="{{$ad->title}}">
            </div>
            <div class="form-group">
                <label for="title">Price</label>
                <input type="text" name="price" class="form-control" id="title" value="{{$ad->price}}">
            </div>
            <div class="form-group">
                <label for="content">Your content</label>
                <textarea name="content" class="form-control" id="content" rows="3">{{$ad->content}}</textarea>
            </div>
            <div class="form-group">
                <input type="submit" value="Update" class="btn btn-info">
            </div>
        </form>
</div>
@endsection

来自 UserAdController 的更新方法:

public function update($id, Request $request){

    $request->validate([
        'title'=>'required',
        'price'=> 'required|integer',
        'content' => 'required'
    ]);

    $data = \App\Ad::find($id);
    $data->title = $request->get('title');
    $data->price = $request->get('price');
    $data->content = $request->get('content');
    $data->save();

    return redirect()->back()->with('success', 'Data updated');

}

标签: phpsymfonylaravel-5.7

解决方案


我不是 laravel 开发者。我只是偶然发现了文档。您还应该将 csrf 字段添加到刀片

edit.blade.php中,在开始<form>标签之后添加

{{csrf_field()}}

您的更新方法中的参数也没有很好地安排

它应该是

public function update(Request $request, $id) { 


}

第二个参数($id)来自您在web.php文件中定义的路由

Route::post('/user/update/{id}', ['as' => 'users.update', 'uses' =>'UserAdController@update']);

哪里{id}会换成原来的id


推荐阅读