魔法使いの卵

WEBエンジニアの卵の成長記録

Laravel5 入力値の受け渡しついでにバリデーションをしてDBに更新処理をしたったw

今回はLaravel5の新しい機能とか少し試しながら
DBの更新処理をゴールにバリデーションとかを試してみたw

ちなみに一覧表示は下記でやってみたw


Laravel5 一覧取得をやってみたったwんごwww - 魔法使いの卵

 

コントローラー(AdminController)

<?php namespace laravel5\Http\Controllers;
use laravel5\Http\Requests;
use Illuminate\Http\Request;
use laravel5\User;
class AdminController extends Controller {

/**
* ユーザ情報編集
*/
public function userEdit(Request $request)
{
$id = $request->input('id');
$userdata = User::withTrashed()->find($id);
return view('admin.user_edit')->with('userdata',$userdata);
}

/**
* ユーザ情報確認
*/
public function userEditConfirmation(Requests\UserEditRequest $request)
{
$userdata = $request->all();
return view('admin.user_edit_confirmation')->with('userdata',$userdata);
}

/**
* ユーザ情報更新
*/
public function userEditCompletion(Request $request)
{
$userdata = $request->input();
$user = User::withTrashed()->find($userdata['id']);
$user->name = $userdata['name'];
$user->email = $userdata['email'];
$user->password = $userdata['password'];
$user->zipcode = $userdata['zipcode'];
$user->address = $userdata['address'];
$user->barthday = $userdata['barthday'];
$user->age = $userdata['age'];
$user->sex = $userdata['sex'];
$user->delete_flag = $userdata['delete_flag'];
$user->save();
return view('admin.user_edit_confirmation')->with('userdata',$userdata);
}
}

Laravel4からリクエストの取得方法も変わって
今回からはリクエストクラスを使ってる

メリット

まず一番大きい特徴は継承を通じてRouteごとにカスタマイズされたRequestClassを使うことが簡単にできる。
それで、何よりもValidationとかAuthenticationなどの処理がすごく楽になったし、
既存のParameterとCookieなどのRequestに関するすべてがRequestクラスひとつで処理できる。

さらに、flash()というMethodは現在のRequestのParameterだけじゃなくて、
その前のRequestのParameterの情報まで簡単に扱うことができるようにしてくれる。

一部抜粋:

Laravel5 - Request(5th) - Qiita

 取り方もリクエストから取得するってのにかわってるから

$request->all();
でリクエストの情報をすべて取得したり
$request->input('カラム名');
で必要なカラム値だけを取得できる。

ちなみにLaravel4の時は下記のような取り方をしてた。
Input::get('id');

うーん。
Laravel5のほうが個人的にいいなぁっておもったw

withTrashed()->
ソフトデリートした値も抽出させる
今回はいろいろためしてみるためにソフトデリートで
実際に論理削除している状態からこれが必要。

 

Laravel5から新しく加わった機能というか考え方?
バリデーションをコントローラーでもなくモデルにでもなく
リクエストの直下に新しく専用のバリデーション処理用のファイルで行える。


下記がバリデーションファイル作成コマンド

php artisan make:request UserEditRequest

生成される場所は下記の直下

laravel5\Http\Requests

に生成されたUserEditRequestを
userEditConfirmationで引数としてつかう

 

UserEditRequest

public function authorize()
{
return true; //falseからtrueに変更
}

public function rules()
{
return [
'id' => 'required',
'name' => 'required',
'email' => 'required',
'password' => 'required',
'zipcode' => 'required',
'address' => 'required',
'barthday' => 'required',
'age' => 'required',
'sex' => 'required',
'delete_flag' => 'required',
];
}

あとはバリデーションを通過したらコントローラーの
userEditConfirmationの処理を通過した結果が返ってくる。
特に問題がなければ正常系で処理されるし
問題があれば前の画面に戻ってバリデーションメッセージを表記してくれる

実際コントローラーでもモデルでもなくなってどうかんじた?

各バリデーションごとにファイルで扱えるから
今までモデルとかコントローラーが肥大化してたのを
これで解消できる気がするのとソースが従来より
読みやすいものになる気がした。(自分で書いたものでも迷う人)

 

次にルーティング

Route::get('/admin/user_edit', 'AdminController@userEdit');
Route::post('/admin/user_edit_confirmation','AdminController@userEditConfirmation');
Route::post('/admin/user_edit_complete','AdminController@userEditCompletion');

特に今まで変わってるところってない気がする
まぁ今回はこんなかんじの構成でやってるーw

ビューは特に何もしてないw
けど簡単にやったことを書いていく。

一覧画面で指定したレコードを編集するために情報を送る

{!! Form::open(array('action' => 'AdminController@userEdit', 'method' => 'get')) !!}
{!! Form::hidden('id',$user['id']) !!}
<td>{!! Form::submit('編集') !!}</td>
{!! Form::close() !!}

バリデーションエラーを返す

@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach

本当にviewでやってるのはこのレベルのことをやってるだけ・・・

とりあえず、気になってたリクエストの扱いとか
バリデーションとか実際にやってみて「ちょっとだけわかったw」ってかんじw


感想:laravel4とlaravel5とでなにが変わったのか
変わっていないのかとかわかってない分めっちゃ時間かかるってのと
use が正直イマイチわかってない。なんでこれを指定しているのか?
とかそのへんがわからずにつかってるあたり俺はだめかもしれない。

4ヶ月前の僕はupdateをするのに1週間から2週間ぐらいかかった。
バリデーションもそれくらい。てか他もすごいかかってたから
Laravel4でいっぱいハマった分使い方わかってるところもあって
そのへんがまだ救いかなぁって思うけど新しいところはやっぱ
学習コストが非常に高い。なんとかしたい・・・。