为什么在此代码中使用update时不使用PUT / PATCH?

时间:2019-02-04 01:58:35

标签: laravel

我是Laravel的新手,我正在阅读一些代码,并遇到密码为update的代码。但是我注意到,在编写CRUD之类的

时,他们没有像在其他示例中看到的那样使用PUT / PATCH方法

<form class="well" method="post" action="{{url('todo/'.$rec->id)}}">
                    {{csrf_field()}}
                    {{method_field("PUT")}}

但是在下面提到的这段代码中,没有提到PUT / PATCH,为什么会这样呢?这是使用Update()的控制器代码

public function updatePassword(Request $request) {
        if ($request->isMethod('post')) {
            $data = $request->all();
            $user_email=Auth::user()->email;
            $check_password = User::where(['email' => Auth::user()->email])->first();
            $current_password = $data['current_pwd'];
            if (Hash::check($current_password, $check_password->password)) {
                $password = bcrypt($data['new_pwd']);
                User::where('email', $user_email)->update(['password' => $password]);
                return redirect('admin/settings')->with('flash_message_success', 'Password Updated Successfully');
            } 
            else {
                return redirect('admin/settings')->with('flash_message_error', 'Current Password Incorrect');
            }
        }
    }

这是HTML代码:

<form class="form-horizontal" method="post" action="{{url('admin/update-pwd')}}" name="password_validate" id="password_validate" novalidate="novalidate">
                <div class="control-group">{{csrf_field()}}
                  <label class="control-label">Current Password</label>
                  <div class="controls">
                    <input type="password" name="current_pwd" id="current_pwd" />
                    <span id="chkpwd"></span>
                  </div>
                </div>

1 个答案:

答案 0 :(得分:-1)

第一件事是@swonder是正确的!开发人员对创建,更新,删除等所有内容都使用POST请求。但这不是您没有要提及PUT / PATCH请求的原因。

自Laravel 4.2起,我一直在Laravel中进行开发,最近,当我开始使用Vue.js制作SPA时,我发现了Laravel迫使我们对{{1}使用POST请求的真正原因}来创建PUT / PATCH请求。

这实际上是由于Symphony(Laravel使用的框架)中的一个已知错误,甚至是PHP本身!

一个错误是(您现在可以自己重新创建所有错误!)是,您无法发送{{ method_field('PATCH/PUT') }}类请求,因为在Controller(或您处理表单数据的位置)中,在Laravel / PHP的multipart/form-data变量中获得null

这就是为什么您不能真正使用$request/$_POST请求来更新具有输入作为产品图像的文件的资源。

但是Laravel尊重代码标准和代码的简洁性,因此您可以在{strong> web.php 或 api.php 中使用{{ 1}}或PUT/PATCH请求类型。但是您必须在表单中使用patch,以使Laravel理解这是一种put的请求。

当我知道这一点时,我感到非常震惊,因为我是一个不喜欢混乱并希望一切都完美的人!