実現したいこと
現在、会員登録システムを作っています。
その仮登録の過程で、まずメールアドレスを入力してもらい、emailtoken(本人確認のためのもの)を作成し、メールアドレスとemailtokenのみをDB上に収納して、他の部分は空の状態にしたいと考えています。
起きている問題
メールアドレスとemailtokenのみをDB上に収納するため、他の部分が入らずエラーを吐いてしまいます。
前回作ったアプリ上ではうまくいったのですが、なぜか今回はうまくいきません。
ソースコード
User.php
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Str; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function preregister($email){ $user = new User; $user->email = $email; $user->email_verify_token = Str::random(40); $user->save(); } }
web.php
//会員登録 Route::view('/register', 'preregister')->name('preregister'); Route::post('/register', 'UserController@createMailToken');
UserController.php
//新規登録時の登録メールアドレスの認証(emaitoken作成) public function createMailToken(Request $request){ //Validation部分 $rule = [ 'email' => 'required|max:500|unique:users,email', ]; $messages = [ 'email.unique' => 'すでに存在しているメールアドレスです。', 'email.required' => 'メールアドレスは必ず入力してください。', 'email.max' => 'メールアドレスは500文字以内で入力してください。' ]; $validator = Validator::make($request->all(), $rule, $messages); if ($validator->fails()) { return redirect()->route('preregister') ->withErrors($validator) ->withInput(); } //仮登録のためにemailtokenの発行・DB内にemail保存 User::preregister($request->get('email')); //セッション内にemailを保存 $request->session()->put('email', $request->input('email')); return redirect()->route('mail_sent'); }
試したこと
DBへの収納を行う際に、nullを設定してみましたが、DBにはnullを入力できないとエラーを吐きました。
そのため、テーブル定義でnot null制約を解除しようと思いましたが、
composer.pharでcomposer使用しているため、composerを使用する時は、htdocs/thing_adminでdoctrine/dbal packageをインストールしています。
しかし、artisanを行うときは、hydocs/thing_admin/thingでしか行えないため、doctrine/dbal packageartisanがインストールされておらず、カラム変更が出来ないと表示されました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。