前回の記事では入力フォームと基本的なバリデーションを作成しました。
今回はバリデーションを調整して完成させて、バリデーションを通過したデータでユーザー情報をデータベースに登録するところまでやっていきます。
バリデーション調整
メールアドレス、パスワード、ニックネームのそれぞれに必須入力のバリデートは追加しましたが、まだ他にも各項目に対して以下のチェックをする必要があります。
パスワード:最低8文字以上
パスワードの8文字以上は勝手に決めた数字ですが、1文字のパスワードとかを許容してしまうと意味が無いので最低何文字かはチェックした方がいいと思います。
そしてこれらの実装をすると以下のようになります。
$validatedData = $request->validate([ 'email' => 'required|email', 'password' => 'required|min:8', 'nickname' => 'required', ]);
1つの項目に対しチェック項目を複数指定する時は|でつないで複数指定を行います。
ただしこのままではまたエラーメッセージが英語のままなので前回同様resources/lang/jp内のvalidation.phpを修正します。
emailとmin(string)のエラーメッセージを以下のように修正してみます。
'email' => ':attributeが正しい形式ではありません', 'string' => ':attributeは:min文字以上で入力してください',
これで適当な値を入力して進むときちんとチェックされてエラーメッセージが表示されることを確認できると思います。
入力した値が消えるので維持させる
上の画像を見るとわかりますが、値を入れて送信すると入れておいた値が消えてしまっています。これを維持したままにできるようにしましょう。
エラーの際に入力した値をそのままにしておくには以下のようにします。
<input type="text" name="email" value="{{ old('email') }}" class="form-control"> <input type="text" name="nickname" value="{{ old('nickname') }}" class="form-control">
oldが入力した値を維持して戻ってくる部分です、パスワードは入力した値を維持しないようにそのままにしています。
入力されたデータをデータベースへ登録
とその前にそもそものデータベースですがmysqlが動いていてwhateatという名のデータベースがあるという状態とします。
まずはosのコマンドラインから直接mysqlに入って実行します。
mysql -uroot create database whateat; exit
これまでの記事で作成したユーザーテーブルの構造をダンプしたものを作成したwhateatに対して実行します。
mysql -uroot whateat 下の一連をコピペして実行 CREATE TABLE users ( user_id int(11) NOT NULL auto_increment, mail varchar(255) NOT NULL, `password` varchar(255) NOT NULL, nickname varchar(255) NOT NULL, created_at datetime NOT NULL, PRIMARY KEY (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
一連の流れの画像は以下です。
設定ファイルでデータベース名を指定
laravelを設置したところに.envというファイルがあるので、そこでデータベース名を指定します(本来はパスワードも指定するべきだと思います)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=whateat DB_USERNAME=root DB_PASSWORD=
これでようやくデータベースを使う準備はOKです。
データベースへの登録処理
SignupController内のaddメソッドのバリデーションを抜けた先に以下の処理を追記します。
$data = array(); $data['mail'] = $request->input('email'); $data['password'] = password_hash($request->input('password'), PASSWORD_BCRYPT); $data['nickname'] = $request->input('nickname'); $data['created_at'] = now(); DB::table('users')->insert($data);
しかしここで「could not find driver」というエラーが、phpinfoで確認するとPDOがsqliteのみでmysqlが無い状態。
ということでyumでphp-mysqlndをインストールしてapacheを再起動します。
yum -y install php-mysqlnd systemctl restart httpd
これで実行するとデータが登録されるところまでは作成できました。
ログイン処理を見越してのリファクタリング
基本の流れはここまでとし、今回はユーザー登録の部分なのでこの後にログイン済みにする処理を書いていこうと思います。
今回書いた部分も調整する可能性がありますので、合わせて次の記事を参照していただければ幸いです。