티스토리 뷰

Laravel에서 form post 등록과 validation에 대해서 정리해 본다.

 

등록하려는 Model에 해당 항목이 등록 수정이 허가가 되있는지 확인한다.

app/Models/Owner.php

protected $fillable = [
    'name',
    'email',
    'password',
];

 

html 부분 코드 (간략하게 이름과 메일)

resources/views/admin/owners/create.blade.php

<div class="lg:w-1/2 md:w-2/3 mx-auto">
    <x-auth-validation-errors class="mb-4" :errors="$errors" />
    <form method="post" action="{{ route('admin.owners.store') }}">
    	@csrf
        <div class="-m-2">
            <div class="p-2 w-1/2 mx-auto">
                <div class="relative">
                    <label for="name" class="leading-7 text-sm text-gray-600">이름</label>
                    <input type="text" id="name" name="name" value="{{ old('name') }}" required>
                </div>
            </div>
            <div class="p-2 w-1/2 mx-auto">
                <div class="relative">
                    <label for="email" class="leading-7 text-sm text-gray-600">메일</label>
                    <input type="email" id="email" name="email" value="{{ old('email') }}" required>
                </div>
            </div>
            <div class="p-2 w-full flex justify-around mt-4">
                <button type="button"
                    onclick="location.href='{{ route('admin.owners.index') }}'">돌아가기
                </button>
                <button type="submit">
                    등록하기
                </button>
            </div>
        </div>
    </form>
</div>

 

Controller의 저장 메소드

app/Http/Controllers/Admin/OwnersController.php

use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules; // 패스워드 저장할 경우 검사를 위해 사용한다.

public function store(Request $request)
{
	// Validation 검사
    $request->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:owners'],
        'password' => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

	// Eloquent 모델을 통한 DB 등록처리
    Owner::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);

	// 등록후 리다이렉트
    return redirect()->route('admin.owners.index');
}

 

에러가 발생 할 경우 html 에 다음과 같이 에러를 표시할 수 있다.

resources/views/admin/owners/create.blade.php 를 보면 다음과 같은 컴포넌트를 참고 하고 있다.

<x-auth-validation-errors class="mb-4" :errors="$errors" />

 

 

resources/views/components/auth-validation-errors.blade.php 컴포넌트를 자세히 보면

@props(['errors'])

@if ($errors->any())
    <div {{ $attributes }}>
        <div class="font-medium text-red-600">
            {{ __('Whoops! Something went wrong.') }}
        </div>

        <ul class="mt-3 list-disc list-inside text-sm text-red-600">
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

넘겨준 errors 파라미터를 받아 표시하고 있음을 알 수 있다.

'개발지식 > Laravel' 카테고리의 다른 글

Laravel Pagination  (0) 2024.02.13
Laravel 데이터 삭제 처리  (0) 2024.02.12
Laravel Carbon  (0) 2024.02.09
Laravel 데이터 취급 비교  (1) 2024.02.08
Laravel seeder 데이터 생성  (1) 2024.02.08