본문 바로가기
소프트웨어 개발/PHP

[코드이그나이터4] 커스텀 검증(Validation) 모듈 만들기

by 인생은즐겁게 2022. 2. 13.
반응형

 

1. 사용자 검증 모듈 만들기

 

app 폴더에 Validation 폴더를 만듭니다. 이 폴더는 검증 관련 모듈을 관리하는 폴더로 사용할 것입니다.

그리고, Validation 폴더에 UserValidation.php 파일을 만듭니다. isonlyHangul메소드는 한글만 입력하였는지 체크하는 메소드입니다.

<?php

namespace App\Validation;

class UserValidation
{
	public function isonlyHangul( $text, $encode = 'utf-8' )
    {
        $check  = true;
        $len    = mb_strlen($text,$encode);
        for( $i = 0; $i < $len; $i++ )
        {
            $cha = mb_substr( $text, $i , 1, $encode );

            if( !preg_match("/[\xA1-\xFE\xA1-\xFE]/", $cha ) )
            {
                $check = false;
                break;
            }
        }

        return $check;
    }
}

 

 

2. 사용자 검증 모듈 등록

 

app\Config\Validation.php 파일에서 UserValidation::class를 등록해 줍니다. 주의하실 것이 상단에 use \App\Validation\UserValidation; 선언해 줍니다.

<?php
	
use \App\Validation\UserValidation;

public $ruleSets = [
  //... 기존 검증 모듈..
  UserValidation::class // 사용자모들등록
];

 

설정 예)

<?php

namespace Config;

use CodeIgniter\Validation\CreditCardRules;
use CodeIgniter\Validation\FileRules;
use CodeIgniter\Validation\FormatRules;
use CodeIgniter\Validation\Rules;
use \App\Validation\UserValidation;

class Validation
{
    //--------------------------------------------------------------------
    // Setup
    //--------------------------------------------------------------------

    /**
     * Stores the classes that contain the
     * rules that are available.
     *
     * @var string[]
     */
    public $ruleSets = [
        Rules::class,
        FormatRules::class,
        FileRules::class,
        CreditCardRules::class,
        UserValidation::class
    ];

    /**
     * Specifies the views that are used to display the
     * errors.
     *
     * @var array<string, string>
     */
    public $templates = [
        'list'   => 'CodeIgniter\Validation\Views\list',
        'single' => 'CodeIgniter\Validation\Views\single',
    ];

    //--------------------------------------------------------------------
    // Rules
    //--------------------------------------------------------------------
}

 

3. 구현 

 

구현 참고)

아래 예제는 참고용이므로 실행시 작동은 안합니다. 커스텀하게 만든 검증 모듈인 UserValidation모듈을 활용하는

방법만 참고하시면 됩니다. ( isonlyHangul 부분 참고)

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\BoardModel;

class Board extends BaseController
{
    protected $bm;

    public function __construct()
    {
        $this->bm = new BoardModel();    
    }
    public function index()
    {

        $sch    = ( $this->request->getVar("sch") )? $this->request->getVar("sch") : '';
        $bm     = $this->bm->get_all_data($sch);
        

        $data = [
            'board_data'    => $bm['data'],
            'pager'         => $bm['pager'],
            'sch'           => $sch,
            'param'         => $this->request->uri->getQuery()
        ];
        

        echo view("board/list",$data);
    }

    public function view($ss_board_id)
    {
        //$this->bm->get_data($ss_board_id);
        //print_r($this->bm->get_data($ss_board_id));
        //$this->request->getUserAgent()->getReferrer();

        //echo $this->request->getUserAgent()->getReferrer(); 

       
        $data = [
            'data'      => $this->bm->get_data($ss_board_id),
            'param'     => $this->request->uri->getQuery()
           
        ];

        echo view("board/view",$data );
    }


    public function write()
    {
        echo view("board/write");
    }


    public function save()
    {
        $rules = [
            'writer'    => 'required|min_length[2]|isonlyHangul[writer]'
        ];

        $errors = [
			'writer' => [
                'required'      => '작성자를 입력하세요.',
				'isonlyHangul'  => '한글만 입력가능합니다.'
			]
		];

        if (!$this->validate($rules, $errors)) 
        {
            //print_r($this->validator->getErrors());
            echo $this->validator->getError('writer');

        }


    }

}

form에서 request한 값들 중에서 writer값을 검증하는 예입니다.

    public function save()
    {
        $rules = [
            'writer'    => 'required|min_length[2]|isonlyHangul[writer]'
        ];

        $errors = [
			'writer' => [
                'required'      => '작성자를 입력하세요.',
				'isonlyHangul'  => '한글만 입력가능합니다.'
			]
		];

        if (!$this->validate($rules, $errors)) 
        {
            //print_r($this->validator->getErrors());
            echo $this->validator->getError('writer');

        }


    }

 

반응형

댓글