[Laravel] 장착 인증 기능을 사용자 정의 (사용자 등록시 항목 늘리기)

하고 싶은 일



Laravel에 처음부터 준비되어 있는 로그인 기능을 자유롭게 커스터마이즈 할 수 있게 되고 싶다.
이번에는 사용자 등록시 등록 항목을 늘리고 싶습니다.

【기본 사용자 등록 화면】
이름, 이메일 주소, 비밀번호를 등록할 수 있습니다.


환경



CentOS: 7.4
Apache: 2.4
MySQL: 5.7
PHP: 7.2
Laravel: 5.6

아래 준비



터미널에서 다음 두 가지를 치십시오.
php artisan make:auth

이제 인증 관련 루트와 뷰를 한 번에 만들어 줍니다.
php artisan migrate

이것으로 Laravel 표준 장비의 Users 테이블을 만들어 줍니다.

테이블에 새 열(열) 추가



이번에는 Users 테이블에 성별과 연령 항목을 늘려보고 싶습니다.

우선 마이그레이션 파일을 작성.
명령을 두드리십시오.
php artisan make:migration add_column_to_users_table

방금 만든 마이그레이션 파일을 편집합니다.
public function up()
{
    Schema::table('users', function(Blueprint $table) {
        $table->string('gender');
        $table->integer('age');
    });
}

마지막으로 마이그레이션 파일을 실행합니다.
php artisan migrate

이제 users 테이블에 gender 와 age 의 컬럼이 추가되었는지 생각합니다.

뷰 편집



이런 식으로 Gender와 Age 입력란을 추가합니다.



처음부터 준비되어 있는 Name 등의 폼 부분을 복사하여 내용을 다시 씁니다.

register.blade.html
<!-- 省略 -->

<!-- 性別の入力欄 -->
<div class="form-group row">
    <label for="gender" class="col-md-4 col-form-label text-md-right">Gender</label>

    <div class="col-md-6" style="padding-top: 8px">
        <input id="gender-m" type="radio" name="gender" value="male">
        <label for="gender-m">Male</label>
        <input id="gender-f" type="radio" name="gender" value="female">
        <label for="gender-f">Female</label>

        @if ($errors->has('gender'))
            <span class="invalid-feedback">
                <strong>{{ $errors->first('gender') }}</strong>
            </span>
        @endif
    </div>
</div>

<!-- 年齢の入力欄 -->
<div class="form-group row">
    <label for="age" class="col-md-4 col-form-label text-md-right">Age</label>

    <div class="col-md-6">
        <input id="age" type="number" min="1" class="form-control{{ $errors->has('age') ? ' is-invalid' : '' }}" name="age" value="{{ old('age') }}" required>

        @if ($errors->has('age'))
            <span class="invalid-feedback">
                <strong>{{ $errors->first('age') }}</strong>
            </span>
        @endif
    </div>
</div>

<!-- 省略 -->

모델 편집



컨트롤러 편집에 들어가기 전에 조금 모델을 편집합니다.
User 모델의 $fillable에 앞서 추가한 두 항목을 추가합니다.

User.php
protected $fillable = [
    'name', 'gender', 'age', 'email', 'password',
];

DB에 등록할 수 있도록 허용하려면 화이트리스트$fillable에 항목을 추가해야 합니다.
자세하게 알고 싶은 분은 이하의 사이트가 참고가 될까 생각합니다.

참고 사이트

컨트롤러 편집



밸리데이션



추가한 2항목의 밸리데이션을 설정합니다.
여기 편의 설정은 자유롭게 가 주시면 좋겠습니다.

RegisterController.php
protected function validator(array $data)
{
    return Validator::make($data, [
        'name'     => 'required|string|max:255',
        'gender'   => 'required',
        'age'      => 'required|integer',
        'email'    => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

DB에 저장



특히 아무것도 생각하지 않고 gender와 age를 등록할 수 있도록 추가합시다.

RegisterController.php
protected function create(array $data)
{
    return User::create([
        'name'     => $data['name'],
        'gender'   => $data['gender'],
        'age'      => $data['age'],
        'email'    => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

사용자 등록하기



항목을 채우고 힘내.



성공적으로 로그인할 수 있었습니다.



다음으로 밸리데이션 기능을 확인하기 위해서, 성별을 일부러 미입력으로 등록해 보겠습니다.



힘들다.



어쨌든 DB에서 시작되었지만 오류 메시지가 표시되지 않습니다 ....$errors 내용을 확인하면 확실히 오류 메시지가 토출됩니다.
"The gender field is required."

HTML을 살펴보면 오류 메시지를 둘러싼 태그가 왜인지display: none;입니다.
원인은 몰랐습니다만, 우선 <span style="display:inline;"> 라고 인라인 지정해 주었더니 정상적으로 에러 메세지가 표시되었습니다.



우~응, 원인 알 사람이 있으면 가르쳐 주시면 도움이 됩니다_(._.)_

오늘은 여기까지.

좋은 웹페이지 즐겨찾기