Code Igniter3 - Rest API에 form_validation 사용해보기

ironcat·2022년 3월 14일
0

php

목록 보기
1/1

Code Igniter3 REST API에 form_validation 사용해보기
form_validation을 이용해 소스를 좀 더 깔끔하게 작성해보고자 함
1. Rest API 참고
2. Form validation 참고

<?php
   
require APPPATH . 'libraries/REST_Controller.php';
     
class Item extends REST_Controller {
    
	  /**
     * Get All Data from this method.
     *
     * @return Response
    */
    public function __construct() {
       parent::__construct();
       $this->load->database();
    }
       
    /**
     * Get All Data from this method.
     *
     * @return Response
    */
	public function index_get($id = 0)
	{
        if(!empty($id)){
            $data = $this->db->get_where("items", ['id' => $id])->row_array();
        }else{
        	$param = $this->request->get();
            $page = $param['page'];
            $limit = $param['limit'];
            // param값에 따라 다른 처리
            $data = $this->db->get("items")->result();
        }
     
        $this->response($data, REST_Controller::HTTP_OK);
	}
      

Rest_Controller를 상속받은 Item Class를 생성하면 아래와 같은 URL로 request 요청이 가능해진다.

GET  /item/{$id}
GET  /item?page=1&limit=100
POST /item
...

하지만 resource가 많아지게 되면 resource마다 request data에 대해 예외처리를 모두 추가해줘야 한다. 그래서 resource controller를 타기 전에 공통적으로 타는 base controller를 만들어 중복 내용을 정리해보려 한다.

class Base extends REST_Controller {
	// Rest Controller를 상속 받아 작성
}

Class Item extends Base {
	// Base Cotroller를 상속 받아 작성
}

별도의 Base class 파일을 작성하여
Rest Controller -> Base -> item 순으로 작동하도록 한다.

class Base extends REST_Controller {

	public function __construct() {
       parent::__construct();
       $this->load->library('form_validation');
       $this->validation();
    }
    
    public function validation() {
    	// validation
        $this->form_validation->set_rules('page', 'limit', 'required|numeric');
        $this->form_validation->set_rules(
        'limit', 
        'Limit', 
        'is_natural_no_zero',
        array('rule' => 'Error Message')
);
    }
}

위와 같이 form_validation->set_rules()를 사용해 param값들에 대한 validation 추가할 수 있으며, config 파일을 별도로 만들어 아래와 같은 방법으로 사용하는 것도 가능하다.

$config = array(
        array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'required'
        ),
        array(
                'field' => 'password',
                'label' => 'Password',
                'rules' => 'required',
                'errors' => array(
                        'required' => 'You must provide a %s.',
                ),
        ),
        ...
);
// base controller에서 require 후 사용
$this->form_validation->set_rules($config);


form validation 규칙 중에 required, min max_length, numeric, in_list 일반적으로 많이들 추가하는 예외처리여서 사용하기 좋은 것 같다. 개인적으로 is_unique도 아이디나 이름처럼 고유한 값 체크에 유용했다.

만약 validation에 원하는 규칙이 없는 경우 아래와 같이 callback_{fuction name}으로 규칙처럼 만들어 사용할 수 있다.

$this->form_validation->set_rules('username', 'Username', 'callback_username_check');

public function username_check($str)
{
	if ($str == 'test')
    {
    	$this->form_validation->set_message('username_check', 'The {field} field can not be the word "test"');
		return FALSE;
    }
    else
    {
    	return TRUE;
    }
}

form_validation을 통해 소스를 깔끔하게 작성하고자 고민했던 내용을 정리한 것입니다.

profile
공부하는 블로그

0개의 댓글