larevel5.1(Model Binding)で、レコード更新時のPassword入力欄の挙動について
Model Bindingというのはレコード更新画面でフィールド名を指定するだけで、入力欄+初期値をレコードの値にしておいてくれるLaravelのBladeテンプレート便利機能です。
{!! Form::text(‘family_name’) !!}
ただし、パスワードには効かないみたいで空欄のまま。
パスワードは上書きするのみで表示するのは好ましくない!という趣旨らしい(そもそも普通はパスワードをハッシュ化するので、取得しても意味が無い)
http://stackoverflow.com/questions/24886109/how-to-pass-value-to-password-field-in-laravel
しょうがないので、以下のようにしたら上手く行った。
1 2 3 |
<input type='password' name='password' value="DBに入っていた値"> // Laravelのコードは、こんな感じ {!! Form::input('password', 'password', $user->password); !!} |
ただ、上記のはパスワードがハッシュ化していないのが前提。
パスワードハッシュ化が前提だとMySQLから取得しても意味が無い(ハッシュ化された値を、さらにハッシュ化するだけ!)ので、更新画面では「Password入力欄」は空欄で表示。
Submit時に空欄の場合は更新しない。1文字でも入力されていたら上書きって方が良いと思ったので、実装してみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// edit.blade.php {!! Form::password(‘password’); !!} // UsersController.php public function update(Request $request, $id) { $this->user = User::findOrFail($id); $data = $request->all(); // password欄が空欄なら更新しない if($request->get('password') === ''){ unset($data['password']); } $this->user->fill($data); $this->user->save(); return redirect()->to('/user/'.$id); } |