Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」2 繝ュ繧ー繧、繝ウID蟆主・
Laravel縺ョ繝代ャ繧ア繝シ繧ク縺ィ縺励※蛻ゥ逕ィ縺ァ縺阪k繝ュ繧ー繧、繝ウ讖溯ス縺ョ繧ォ繧ケ繧ソ繝槭う繧コ繧キ繝ェ繝シ繧コ隨ャ莠悟シセ縺ィ縺励※
繝ュ繧ー繧、繝ウシゥシ、繧貞ー主・閾エ縺励∪縺吶
譛霑代ッ縲後Γ繝シ繝ォ繧「繝峨Ξ繧ケ縲阪→縲後ヱ繧ケ繝ッ繝シ繝峨阪〒繝ュ繧ー繧、繝ウ縺ァ縺阪k繧オ繧、繝医′荳闊ャ逧縺ァ縺吶′
繝ュ繧ー繧、繝ウシゥシ、繧剃スソ縺医k繧医≧縺ォ縺励◆縺縺ィ縺縺隕∵悍繧ゆク螳壽焚縺斐*縺縺セ縺吶ョ縺ァ縲∽サ雁屓縺ッ縺薙ョ蟇セ蠢懊r縺皮エケ莉九>縺溘@縺セ縺吶
繧オ繧、繝域ァ区
- 莨壼藤逋サ骭イ縲竊舌縺薙%縺ォ繝ュ繧ー繧、繝ウシゥシ、繧定ソス蜉
 - 繝ュ繧ー繧、繝ウ縲竊舌繝ュ繧ー繧、繝ウシゥシ、縺ァ繝ュ繧ー繧、繝ウ縺ァ縺阪k繧医≧縺ォ縺吶k
 - 莨壼藤繝。繝九Η繝シ
 - 繝ュ繧ー繧「繧ヲ繝
 - 繝代せ繝ッ繝シ繝牙崎ィュ螳
 
螳溯」
謇矩縺ッ荳玖ィ倥ョ騾壹j縺ァ縺吶
- 莨壼藤逋サ骭イ逕サ髱「繧剃ソョ豁」
 - 莨壼藤逋サ骭イ逕ィcontroller繧剃ソョ豁」
 - 繝ュ繧ー繧、繝ウ逕サ髱「繧剃ソョ豁」
 - 繝ュ繧ー繧、繝ウ逕ィcontroller繧剃ソョ豁」
 
縺セ縺壻シ壼藤逋サ骭イ縺ョ讖溯ス繧剃ソョ豁」縺励∽シ壼藤縺御ス懈舌〒縺阪k縺薙→繧堤「コ隱阪〒縺阪◆蠕
繝ュ繧ー繧、繝ウ讖溯ス繧剃ソョ豁」縺励※縺縺阪∪縺吶
莨壼藤逋サ骭イ逕サ髱「縺ョ菫ョ豁」
name縺ョ驛ィ蛻繧値ogin_id縺ォ菫ョ豁」縺励∪縺吶
窶サ豕ィシ√荳諡ャ鄂ョ謠帙☆繧九→荳崎ヲ√↑驛ィ蛻繧ゆソョ豁」縺励※縺励∪縺縺セ縺吶ョ縺ァ縲∽ク玖ィ倥r縺碑ヲァ縺ォ縺ェ繧翫↑縺後i菫ョ豁」縺上□縺輔>
縺薙■繧峨′螳梧仙ス「縺ァ縺
@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Register') }}</div>
                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf
                        <div class="form-group row">
                            <label for="login_id" class="col-md-4 col-form-label text-md-right">{{ __('login_id') }}</label>
                            <div class="col-md-6">
                                <input id="login_id" type="text" class="form-control @error('login_id') is-invalid @enderror" name="login_id" value="{{ old('login_id') }}" required autocomplete="login_id" autofocus>
                                @error('login_id')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>
                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
莨壼藤逋サ骭イ逕ィcontroller縺ョ菫ョ豁」
菫ョ豁」縺吶k縺ョ縺ッ縲√ヰ繝ェ繝繝シ繧キ繝ァ繝ウ讖溯ス縺ィ繝繝シ繧ソ逕滓先ゥ溯ス縺ョ2縺区園縺ァ縺吶
繝舌Μ繝繝シ繧キ繝ァ繝ウ
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'login_id' => ['required', new alpha_num_check(), 'max:20','unique:users'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
login_id縺ォ蟇セ縺励※縺ョ繝舌Μ縺ァ繧キ繝ァ繝シ繝ウ繝ォ繝シ繝ォ繧定ソス蜉縺励※縺縺セ縺吶
| 鬆逶ョ | 諢丞袖 | 
|---|---|
| required | 蠢鬆亥・蜉帙〒縺 | 
| new alpha_num_check() 窶サ霑ス蜉髢狗匱讖溯ス  | 蜊願ァ定恭謨ー縺ァ縺ゅk縺薙→繧偵メ繧ァ繝繧ッ 蜈ャ蠑上し繧、繝郁ィ倩シ峨ョalpha_num縺ァ縺ッ谿句ソオ縺ェ縺後i譌・譛ャ隱樊枚蟄怜励ッ繧ケ繝ォ繝シ縺輔l縺ヲ繝√ぉ繝繧ッ縺輔l縺セ縺帙s 縺昴ョ縺溘a縲∬ソス蜉讖溯ス繧帝幕逋コ縺励※縺翫j縺セ縺吶 隧ウ邏ー縺ッ蜊願ァ定恭謨ー縺ョ繝舌Μ繝繝シ繧キ繝ァ繝ウ繧偵#隕ァ縺上□縺輔>  | 
| max:20 | 譛螟ァ20譁蟄 | 
| unique:users | users繝繝シ繝悶Ν蜀縺ァ縺ョlogin_id縺ォ蟇セ縺励※縺ョ驥崎、繝√ぉ繝繧ッ | 
繝繝シ繧ソ逕滓
    protected function create(array $data)
    {
        return User::create([
            'login_id' => $data['login_id'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
4陦檎岼縺ァlogin_id縺ク縺ョ逋サ骭イ讖溯ス繧定ソス蜉縺励※縺翫j縺セ縺吶
譛蠕後↓縲√ョ繝シ繧ソ繝吶シ繧ケ縺ョ逋サ骭イ蜈医r菴懈舌☆繧九◆繧
migration繝輔ぃ繧、繝ォ繧剃ス懈舌@縺ヲ縲「sers繝繝シ繝悶Ν縺ォlogin_id縺ョ繧ォ繝ゥ繝繧定ソス蜉縺励∪縺吶
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('login_id',20)->after('name')->comment('繝ュ繧ー繧、繝ウID');
            $table->unique(['login_id']);
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}
縺薙■繧峨r貅門y縺洋igrate繧ウ繝槭Φ繝峨r縺溘◆縺代ー縲√き繝ゥ繝縺瑚ソス蜉縺輔l縺セ縺吶
php artisan migrate
繝ュ繧ー繧、繝ウ逕サ髱「縺ョ菫ョ豁」
莨壼藤逋サ骭イ逕サ髱「縺ィ蜷梧ァ倥↓name縺ィ險倩シ峨ョ驛ィ蛻繧値ogin_id縺ォ菫ョ豁」縺励∪縺吶
縺薙■繧峨b隱、縺」縺ヲ菫ョ豁」縺励☆縺弱↑縺繧医≧縺ォ豕ィ諢上′蠢隕√〒縺吶
@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Login') }}</div>
                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}">
                        @csrf
                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('login_id') }}</label>
                            <div class="col-md-6">
                                <input id="login_id" type="text" class="form-control @error('login_id') is-invalid @enderror" name="login_id" value="{{ old('login_id') }}" required autocomplete="login_id" autofocus>
                                @error('login_id')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>
                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
繝ュ繧ー繧、繝ウ逕ィcontroller繧剃ソョ豁」
譛ャ讖溯ス繧剃ソョ豁」縺吶k縺ォ縺ッ縲∵僑蠑オ縺励※縺繧帰uthenticatesUsers繧偵∪縺夂「コ隱阪☆繧句ソ隕√′縺ゅj縺セ縺吶
縺薙%縺ォ縺ッ縲∬ェ崎ィシ讖溯ス縺ョ蟇セ雎。縺ィ縺吶k繧ォ繝ゥ繝縺御ク玖ィ倥ョ繧医≧縺ォ螳夂セゥ縺輔l縺ヲ縺翫j縺セ縺吶
    public function username()
    {
        return 'email';
    }
縺薙l繧偵Ο繧ー繧、繝ウ逕ィcontroller蛛エ縺ァ荳玖ィ倥ョ繧医≧縺ォ繧ェ繝シ繝舌シ繝ゥ繧、繝芽エ縺励∪縺吶
    public function username()
    {
        return 'login_id';
    }
縺薙l縺ァ隱崎ィシ縺ォ蛻ゥ逕ィ縺吶k繧ォ繝ゥ繝繧偵Ο繧ー繧、繝ウシゥシ、縺ォ螟画峩縺吶k縺薙→縺後〒縺阪∪縺励◆縲

縺薙l縺ァ莨壼藤逋サ骭イ縺ィ繝ュ繧ー繧、繝ウ讖溯ス縺ォ縲後Ο繧ー繧、繝ウシゥシ、縲阪r霑ス蜉縺吶k蟇セ蠢懊′螳御コ縺励∪縺励◆縲
Laravel繝ュ繧ー繧、繝ウ讖溯ス騾」霈我ク隕ァ
- Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」1縲蝓コ譛ャ讖溯ス
 - Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」2縲繝ュ繧ー繧、繝ウID縺ョ蟆主・縲竊舌>縺セ縺薙%
 - Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」3縲莨壼藤逋サ骭イ譎ゅョ蜈・蜉幃逶ョ霑ス蜉
 - Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」4縲ValueObject縺ィ繝舌Μ繝繝シ繧キ繝ァ繝ウ
 - Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」5縲莨壼藤諠蝣ア螟画峩
 


