Laravel 5.4 - RouteCollection.php第233行

时间:2017-03-27 16:23:58

标签: php ajax laravel-5 bootstrap-modal

在我的laravel 5.4 app中,我有一个crud模块。对于编辑位,数据以引导模式呈现。数据被成功拉出但是在点击更新按钮时,会返回显示的错误。

这里我的刀片形式是在模态中呈现的:

<form id="formEdit" class="form-horizontal" role="form" method="put">
//form elements
</form>

这里是处理它的ajax:

//edit_id is defined globally
$('#updateClass').click(function(){
        var name = $("#formEdit #name").val();
        var status = ($('#formEdit #status').prop("checked") == true) ? 1 : 0;
        var token = $('meta[name="csrf-token"]').attr('content');
        var id = edit_id;
        var url = "classes/update/"+id;
        var formdata = {
            'name' : name,
            'status' : status,
            '_token' : token
        };

        $.ajax({
            method: "PUT",
            url: url,
            data: formdata,
            dataType: "json"
        })
        .done(function(data) {
            //
        })
        .fail(function(data) {
            //

            });
        });
    });

updateClass是在模态上显示编辑表单的按钮。

这是web.php中的路线:

Route::resource('classes', 'ClassesController');

Route::group(['prefix' => 'admin'], function () {
    Route::get('classes', 'ClassesController@index');

    Route::get('classes/edit/{id}',  'ClassesController@edit');
    Route::put('classes/update/{id}',  'ClassesController@update');
});

最后,我在类控制器中的更新函数:

public function update(Request $request, $id)
    {
        $validator = $this->validator($request->all());
        $errors = $validator->errors();
        $errors = json_decode($errors);

        if ($validator->passes()) 
        {
            Dl_class::find($id)->update($request->all());
            return response()->json();
        }
        else
        {
            return response()->json($errors, 422);
        }
    }

我错过了什么?

1 个答案:

答案 0 :(得分:2)

要从表单发送PUT请求,您需要发送名为method的hiddne输入元素。像这样:

<input type='hidden' name='_method' value='PUT'>

有一个帮助方法可以做同样的事情:

{{ method_field('PUT') }}

只有这样,Laravel才能识别您的PUT请求。

或者,您也可以将此值包含在您的ajax调用中,例如:

var formdata = {
            'name' : name,
            'status' : status,
            '_token' : token,
            '_method' : 'PUT'
        };