validate

blade에 μΆ”κ°€ν•  수 μžˆλŠ” λΆ€λΆ„

  • {!! csrf_field() !!} : crsf곡격을 막기 μœ„ν•΄ _tokenν‚€λ₯Ό 가진 μˆ¨μ€ ν•„λ“œλ₯Ό λ§Œλ“œλŠ” λ„μš°λ―Έ ν•¨μˆ˜μΈλ°, 이 ν•¨μˆ˜κ°€ 좜λ ₯ν•œ htmlνƒœκ·Έλ₯Ό μ΄μŠ€μΌ€μ΄ν”„ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ {!! !!}문법을 μ‚¬μš©

  • {{old('title')}} = old() : μœ νš¨μ„± 검사에 μ‹€νŒ¨ν•΄μ„œ 이 νŽ˜μ΄μ§€λ‘œ λ‹€μ‹œ λŒμ•„μ™”μ„ λ•Œ μ‚¬μš©μžκ°€ μž…λ ₯ν–ˆλ˜ 값을 μœ μ§€ν•˜κΈ° μœ„ν•œ λ„μš°λ―Έ ν•¨μˆ˜λ‘œ μ„Έμ…˜μ— 인자둜 λ„˜κΈ΄ ν‚€κ°€ μ—†μœΌλ©΄ null을 λ°˜ν™˜ν•œλ‹€.

Controller μž‘μ„±

1. 기본방법

class ArticlesController extends Controller{
    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','μž‘μ„±ν•˜μ‹  글이 μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.');
    }
}
  • $rules : μœ νš¨μ„± 검사λ₯Ό μœ„ν•œ κ·œμΉ™μ„ μ •μ˜ν•  λ°°μ—΄λ‘œ μ—°κ΄€λœ λ°°μ—΄λ‘œ ν‘œν˜„ν•˜κ±°λ‚˜ required|min:10처럼 λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•΄λ„ λœλ‹€.

  • $validator : \Validator::make())λ©”μ„œλ“œλ‘œ μœ νš¨μ„± 검사λ₯Ό μˆ˜ν–‰ν•  수 μžˆλŠ”λ° 첫번째 μΈμžλŠ” κ²€μ‚¬μ˜ λŒ€μƒμ΄ λ˜λŠ” 폼 데이터이고, λ‘λ²ˆμ§Έκ°€ κ·œμΉ™μ΄λ‹€.

    • $validator()->passes() : 검사 μ„±κ³΅μ‹œ true

    • $validator()->fails() : 검사 μ‹€νŒ¨μ‹œ true

  • back() : 이전 νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰μ…˜ ν•˜λŠ” λ©”μ„œλ“œλ‘œ redirect(route('articles.create'))와 κ°™λ‹€.

    • withErrors() : μœ νš¨μ„± 검사기 μΈμŠ€ν„΄μŠ€λ₯Ό 인자둜 λ°›μ•„ 검사 μ‹€νŒ¨ 이유λ₯Ό μ„Έμ…˜μ—λ‹€ μ €μž₯ν•˜λŠ” λ©”μ„œλ“œ

    • withInput() : 폼 데이터λ₯Ό μ„Έμ…˜μ— μ €μž₯ν•˜λŠ” μ—­ν• λ‘œ view의 old()ν•¨μˆ˜λŠ” 이 λ©”μ„œλ“œκ°€ μ €μž₯ν•œ 데이터λ₯Ό μ½λŠ”λ‹€.

    • with() : 인자둜 받은 key-value μŒμ„ μ„Έμ…˜μ— μ €μž₯ν•˜λŠ” μ—­ν• λ‘œ μ‚¬μš©μžμ—κ²Œ ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

μž…λ ₯폼에 λ”°λ₯Έ 였λ₯˜λ©”μ‹œμ§€ μ„€μ •

class ArticlesController extends Controller{
    public function store(Request $request){
        $rules = [ 
            'title' => ['required'],
            'content' => ['required', 'min:10'],
        ];

        $massages = [
            'title.required' => '제λͺ©μ€ ν•„μˆ˜ μž…λ ₯ ν•­λͺ©μž…λ‹ˆλ‹€.',
            'content.required' => '본문은 ν•„μˆ˜ μž…λ ₯ ν•­λͺ©μž…λ‹ˆλ‹€.',
            'content.min' => '본문은 μ΅œμ†Œ :min κΈ€μž 이상이 ν•„μš”ν•©λ‹ˆλ‹€.',
        ]

        $validator = \Validator::make($request->all(), $rules, $massages);
        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','μž‘μ„±ν•˜μ‹  글이 μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.');
    }
}

$validator의 κ°’μ—λŠ” μ˜μ–΄κ°’μ΄ μ €μž₯λ˜μ–΄ μ—λŸ¬κ°€ μ˜μ–΄λ‘œ ν‘œμ‹œλ˜λŠ”λ° μ „μ—­ μ–Έμ–΄ 섀정을 ν•œκΈ€λ‘œ 바꾸어도 μ˜μ–΄λ‘œ ν‘œμ‹œλœλ‹€. μ΄λŠ” μœ νš¨μ„± 검사 였λ₯˜λ₯Ό ν‘œμ‹œν•˜λŠ” μ–Έμ–΄ 파일이 μ—†μ–΄μ„œμ΄λ‹€. μ΄λŠ” μœ„μ½”λ“œμ™€ 같이 make()λ©”μ„œλ“œμ˜ μ„Έλ²ˆμ§Έ 인자둜 λ©”μ‹œμ§€λ₯Ό μ •μ˜ν•œ 배열을 μ£Όλ©΄ ν•œκΈ€λ‘œ ν‘œμ‹œλ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

2. 트레이트 λ©”μ„œλ“œ 이용

class ArticlesController extends Controller{
    public function store(Request $request){
        $rules = [ 
            'title' => ['required'],
            'content' => ['required', 'min:10'],
        ];

        $massages = [
            'title.required' => '제λͺ©μ€ ν•„μˆ˜ μž…λ ₯ ν•­λͺ©μž…λ‹ˆλ‹€.',
            'content.required' => '본문은 ν•„μˆ˜ μž…λ ₯ ν•­λͺ©μž…λ‹ˆλ‹€.',
            'content.min' => '본문은 μ΅œμ†Œ :min κΈ€μž 이상이 ν•„μš”ν•©λ‹ˆλ‹€.',
        ]

        $this->validate($request->all(), $rules, $massages);
      
        $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','μž‘μ„±ν•˜μ‹  글이 μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.');
    }
}

상속받은 ControllerλŠ” Illuminate\Foundation\Validation\ValidatesRequests트레이트λ₯Ό μž„ν¬νŠΈ ν•˜κ³  μžˆλŠ”λ° 이 클래슀의 validate()λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ 1번의 방법인 \Validator::make()와 같은 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

3. 폼 λ¦¬ν€˜μŠ€νŠΈ 클래슀 이용

php artisan make:request ArticlesRequest λͺ…λ Ήμ–΄λ‘œ 폼 λ¦¬ν€˜μŠ€νŠΈ 클레슀λ₯Ό λ§Œλ“€λ©΄ app/Http/Requests디렉토리 밑에 생성이 λœλ‹€.

//ArticleRequest
class ArticleRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    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' => 'λ³Έλ¬Έ',
        ];
    }
}

//ArticlesController
class ArticlesController extends Controller{
    public function store(\App\Http\Requests\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','μž‘μ„±ν•˜μ‹  글이 μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.');
    }
}
  • authorize() : μ‚¬μš©μžκ°€ 이 클래슀λ₯Ό μ£Όμž…λ°›λŠ” λ©”μ„œλ“œμ— μ ‘κ·Όν•  κΆŒν•œμ΄ μžˆλŠ”μ§€λ₯Ό κ²€μ‚¬ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό λ³΄ν˜Έν•˜λŠ” 일을 μˆ˜ν–‰

  • rules() : μ—­ν• λ“€ μ •μ˜

  • messages() : 였λ₯˜λ©”μ‹œμ§€λ“€ μ •μ˜

  • attributes() : 였λ₯˜ λ©”μ‹œμ§€μ— ν‘œμ‹œν•  ν•„λ“œ 이름을 μ‚¬μš©μžκ°€ μ»€μŠ€ν…€ν•˜μ—¬ λ°”κΏ€ 수 있고 이 λ©”μ„œλ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ ν•„λ“œ 이름을 default둜 였λ₯˜λ©”μ‹œμ§€μ— ν‘œμ‹œλœλ‹€.

Controller의 λ©”μ„œλ“œμ—μ„œλŠ” λ§€κ°œλ³€μˆ˜λ‘œ Requestκ°€ μ•„λ‹Œ μš°λ¦¬κ°€ μ •μ˜ν•œ Requestλ₯Ό μ£Όμž…μ‹œμΌœμ£Όλ©΄ λ©”μ„œλ“œλ‚΄μ—μ„œ μœ νš¨μ„±κ²€μ‚¬ 둜직이 빠져도 검사가 μˆ˜ν–‰λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

Last updated