라우터 만들기
routes/web.php
Route::resource('articles', 'ArticlesController');
컨트롤러 뷰반환 작성
app/Http/Controllers/ArtcleController.php
public function create()
{
return view('articles.create');
}
전송 폼 만들기(view)
resources/views/create/index.blase.php
@extends('layouts.app')
@section('content')
<div class="container">
<h1>새 포럼 글 쓰기</h1>
<hr/>
<form action="{{ route('articles.store') }}" method="POST">
{!! csrf_field() !!}
<div class="form-group {{ $errors->has('title') ? 'has-error' : '' }}">
<label for="title">제목</label>
<input type="text" name="title" id="title" value="{{ old('title') }}" class="form-control"/>
{!! $errors->first('title', '<span class="form-error">:message</span>') !!}
</div>
<div class="form-group {{ $errors->has('content') ? 'has-error' : '' }}">
<label for="content">본문</label>
<textarea name="content" id="content" rows="10" class="form-control">{{ old('content') }}</textarea>
{!! $errors->first('content', '<span class="form-error">:message</span>') !!}
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">
저장하기
</button>
</div>
</form>
</div>
@stop
localhost:8000/articles/create 열어 뷰를 확인한다.
ArticleController 데이터베이스 로직 추가
app/Http/Controllers/ArticlesController.php
public function store(Request $request)
{
$rules = [
'title' => ['required'],
'content' => ['required', 'min:10'],
];
$validator = \Validator::make($request->all(), $rules);
if($validator->fails()){
return back()->withErrors($validator)->withInput();
}
$article = \App\User::find(1)->articles()->create($request->all());
if(!$article){
return back()->with('flash_message', '글이 저장되지 않았습니다.')->withInput();
}
return redirect(route('articles.index'))->with('flash_message', '작성하신 글이 저장되었습니다.');
}
이제 저장이 되는지 localhost:8000/articles/create 에서 확인해보자
플래시 메시지
resources/views/layouts/app.blade.php
<!--생략-->
</nav>
@if(session()->has('flash_message'))
<div class="alert alert-info" role="alert">
{{ session('flash_message') }}
</div>
@endif
<!--생략-->
글이 작성되었다고 메시지를 출력해준다.
오류 메시지 사용자화
유효성 검사에 실패하여 돌아온 페이지에서 영어로 된 오류 메시지가 표시된다. 전역 언어 설정을 한글로 바꾸자
config/app.php
'locale' => 'ko',
위와 같이해도 바뀌지가 않는다. 유효성 검사 오류를 표시하는 언어 파일이 없어서다.
app/Http/Controllers/ArticleController.php
$messages를 만들어주고 $validator 인자에 넣어준다.
<!--생략-->
$rules = [
'title' => ['required'],
'content' => ['required', 'min:10'],
];
$messages = [
'title.required' => '제목은 필수 입력 항목입니다.',
'content.required' => '본문은 필수 입력 항목입니다.',
'content.min' => '본은은 최소 :min 글자 이상이 필요합니다.',
];
$validator = \Validator::make($request->all(), $rules, $messages);
if($validator->fails()){
return back()->withErrors($validator)->withInput();
}
<!--생략-->
오류사항이 있으면 메시지로 알려준다.
@extends('master')
@section('content')
<h1>작업지시 작성하기</h1>
<div class="ui stackable two column grid">
<div class="column">
<form class="ui form" method="POST" action="/works">
@csrf
<div class="field">
<div class="ui selection dropdown">
<input type="hidden" name="project_name" value="{{ old('project_name') }}">
<i class="dropdown icon"></i>
<div class="default text" style="color: black">프로젝트명</div>
<div class="menu">
@foreach ($project_lists as $project_list)
<div class="item">{{$project_list->project_name }}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<div class="ui selection dropdown">
<input type="hidden" name="project_code" value="{{ old('project_code') }}">
<i class="dropdown icon"></i>
<div class="default text" style="color: black">프로젝트코드</div>
<div class="menu">
@foreach ($project_lists as $project_list)
<div class="item">{{$project_list->project_code }}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<div class="ui selection dropdown">
<input type="hidden" name="board_name" value="">
<i class="dropdown icon"></i>
<div class="default text" style="color: black">보드명</div>
<div class="menu">
@foreach($board_names as $board_name)
<div class="item">{{ $board_name->boardname }}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<input class="input {{ $errors->has('assy') ? 'is-danger' : '' }}" type="text" name="assy" value="{{ old('assy') }}" placeholder="ASS'Y명" >
</div>
<div class="field">
<input class="input {{ $errors->has('ea') ? 'is-danger' : '' }}" type="number" name="ea" value="{{ old('ea') }}" placeholder="장수">
</div>
<div class="field">
<input class="input {{ $errors->has('set_set') ? 'is-danger' : '' }}" type="number" name="set_set" value="{{ old('set_set') }}" placeholder="편성">
</div>
<?php $dd = date("Y-m-d")?>
<div class="field">
<input type="date" name="end_product_date" value="<?=$dd?>" placeholder="생산완료일">
</div>
<div class="field">
<input class="input {{ $errors->has('memo') ? 'is-danger' : '' }}" type="text" name="memo" value="{{ old('memo') }}" placeholder="메모">
</div>
<div class="field">
<button class="ui button" type="submit">작성완료</button>
</div>
</form>
@if($errors->any())
<div class="ui pink inverted segment">
<ul>
@foreach ($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
</div>
@endif
</div>
</div>
@endsection
폼 리퀘스트 클래스를 이용해서 유효성 검사를 한다.(위와 다른 방법)
이 작업은 컨트롤러에서 소스를 빼내어 Requests\ArticlesRequest.php 로 대체한다는 개념이다.
컨트롤러 소스가 간단해진다. 즉 컨트롤러에서 ArticlesRequest.php 를 인서트한다고 생각하자.
php artisan make:request ArticlesRequest
app/Http/Requests/ArticlesRequest.php 파일이 생성된다.
class ArticlesRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => ['required'],
'content' => ['required', 'min:10'],
];
}
public function messages(){
return [
'required' => ':attribute 은 필수 입력 항목임.',
'min' => ':attribute 은 최소 :min 글자 이상이 필요함.',
];
}
public function attributes(){
return [
'title' => '제목',
'content' => '본문',
];
}
}
app/Http/Controllers/ArticlesConteller.php
use App\Http\Requests\ArticlesRequest;
상단에 위와 같은 소스를 작성해야한다.
public function store(ArticlesRequest $request)
{
$article = \App\User::find(1)->articles()->create($request->all());
if(!$article){
return back()->with('flash_message', '글이 저장되지 않았습니다.')->withInput();
}
return redirect(route('articles.index'))->with('flash_message', '작성하신 글이 저장되었습니다.');
}
'라라벨 > 유효성검사' 카테고리의 다른 글
폼리퀘스트 유효성 검사 Form Requests (0) | 2019.05.25 |
---|