我是Laravel的新手,我正在阅读一些代码,并遇到密码为update
的代码。但是我注意到,在编写CRUD之类的
<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>
答案 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
的请求。
当我知道这一点时,我感到非常震惊,因为我是一个不喜欢混乱并希望一切都完美的人!