폼 유효성 검사¶
CodeIgniter는 작성해야 하는 코드의 양을 최소화하는 데 도움이 되는 포괄적인 폼 유효성 검사 및 데이터 준비 클래스를 제공합니다.
개요¶
CodeIgniter의 데이터 유효성 검사 접근 방식을 설명하기 전에 이상적인 시나리오를 설명합니다:
폼이 표시됩니다.
폼을 작성하고 제출합니다.
잘못된 것을 제출하거나 필수 항목을 놓친 경우 데이터와 함께 문제를 설명하는 오류 메시지가 포함된 폼이 다시 표시됩니다.
이 과정은 유효한 폼을 제출할 때까지 계속됩니다.
수신 측에서 스크립트는:
필수 데이터를 확인해야 합니다.
데이터가 올바른 유형인지, 올바른 기준을 충족하는지 확인합니다. 예를 들어 사용자 이름이 제출된 경우 허용된 문자만 포함되도록 유효성을 검사해야 합니다. 최소 길이여야 하고 최대 길이를 초과해서는 안 됩니다. 사용자 이름은 다른 사람의 기존 사용자 이름이거나 예약어가 될 수 없습니다. 등.
보안을 위해 데이터를 정리합니다.
필요한 경우 데이터를 미리 포맷합니다(데이터를 trim해야 하나요? HTML 인코딩? 등)
데이터베이스 삽입을 위해 데이터를 준비합니다.
위 과정이 특별히 복잡하지는 않지만 일반적으로 상당한 양의 코드가 필요하며, 오류 메시지를 표시하려면 폼 HTML 내에 다양한 제어 구조가 배치됩니다. 폼 유효성 검사는 만들기는 간단하지만 일반적으로 구현하기가 매우 번거롭고 지루합니다.
폼 유효성 검사 튜토리얼¶
다음은 CodeIgniter의 폼 유효성 검사를 구현하기 위한 “실습” 튜토리얼입니다.
폼 유효성 검사를 구현하려면 세 가지가 필요합니다:
회원 가입 폼을 예시로 이 세 가지를 만들어 보겠습니다.
폼¶
텍스트 편집기를 사용하여 myform.php라는 폼을 만드세요. 다음 코드를 입력하고 application/views/ 폴더에 저장하세요:
<html lang="en">
<head>
<title>My Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
성공 페이지¶
텍스트 편집기를 사용하여 formsuccess.php라는 폼을 만드세요. 다음 코드를 입력하고 application/views/ 폴더에 저장하세요:
<html lang="en">
<head>
<title>My Form</title>
</head>
<body>
<h3>Your form was successfully submitted!</h3>
<p><?php echo anchor('form', 'Try it again!'); ?></p>
</body>
</html>
컨트롤러¶
텍스트 편집기를 사용하여 Form.php라는 컨트롤러를 만드세요. 다음 코드를 입력하고 application/controllers/ 폴더에 저장하세요:
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
테스트!¶
폼을 테스트하려면 다음과 유사한 URL로 사이트를 방문하세요:
example.com/index.php/form/
폼을 제출하면 폼이 다시 로드될 것입니다. 아직 유효성 검사 규칙을 설정하지 않았기 때문입니다.
폼 유효성 검사 클래스에 아무것도 검사하도록 지시하지 않았으므로 기본적으로 FALSE(불리언 false)를 반환합니다. ``run()`` 메소드는 어떤 규칙도 실패하지 않고 규칙을 성공적으로 적용한 경우에만 TRUE를 반환합니다.
설명¶
위 페이지들에서 몇 가지를 알 수 있습니다:
폼(myform.php)은 몇 가지 예외를 제외하고는 표준 웹 폼입니다:
폼 헬퍼를 사용하여 폼 오프닝 태그를 만듭니다. 기술적으로 이것이 필수는 아닙니다. 표준 HTML을 사용하여 폼을 만들 수 있습니다. 그러나 헬퍼를 사용하면 설정 파일의 URL을 기반으로 액션 URL이 자동으로 생성됩니다. 이렇게 하면 URL이 변경될 때 애플리케이션의 이식성이 높아집니다.
폼 상단에 다음 함수 호출이 있습니다:
<?php echo validation_errors(); ?>
이 함수는 유효성 검사기가 반환한 오류 메시지를 반환합니다. 메시지가 없으면 빈 문자열을 반환합니다.
컨트롤러(Form.php)에는 index()라는 하나의 메소드가 있습니다. 이 메소드는
유효성 검사 클래스를 초기화하고 뷰 파일에서 사용하는 폼 헬퍼와 URL 헬퍼를 로드합니다.
또한 유효성 검사 루틴을 실행합니다. 유효성 검사가 성공했는지 여부에 따라 폼 또는
성공 페이지를 표시합니다.
유효성 검사 규칙 설정¶
CodeIgniter를 사용하면 주어진 필드에 필요한 만큼 많은 유효성 검사 규칙을 설정하고,
순서대로 연결하며, 동시에 필드 데이터를 준비하고 전처리할 수도 있습니다.
유효성 검사 규칙을 설정하려면 set_rules() 메소드를 사용하세요:
$this->form_validation->set_rules();
위 메소드는 입력으로 세 개의 매개변수를 받습니다:
필드 이름 - 폼 필드에 지정한 정확한 이름.
이 필드의 “사람이 읽을 수 있는” 이름. 오류 메시지에 삽입됩니다. 예를 들어 필드 이름이 “user”인 경우 “Username”과 같이 사람이 읽을 수 있는 이름을 부여할 수 있습니다.
이 폼 필드에 대한 유효성 검사 규칙.
(선택 사항) 현재 필드에 주어진 규칙에 대한 커스텀 오류 메시지 설정. 제공하지 않으면 기본값을 사용합니다.
참고
필드 이름을 언어 파일에 저장하려면 필드 이름 번역를 참조하세요.
예시를 들겠습니다. 컨트롤러(Form.php)에서 유효성 검사 초기화 메소드 바로 아래에 다음 코드를 추가하세요:
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
컨트롤러는 이제 다음과 같이 보여야 합니다:
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required',
array('required' => 'You must provide a %s.')
);
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
이제 필드를 비워두고 폼을 제출하면 오류 메시지가 표시됩니다. 모든 필드를 채워 제출하면 성공 페이지가 표시됩니다.
참고
오류가 있을 때 폼 필드가 아직 데이터로 다시 채워지지 않습니다. 곧 다룰 예정입니다.
배열을 사용하여 규칙 설정¶
계속 진행하기 전에 규칙 설정 메소드에 모든 규칙을 한 번에 설정하려는 경우 배열을 전달할 수 있음을 알아야 합니다. 이 접근 방식을 사용하는 경우 배열 키 이름을 다음과 같이 지정해야 합니다:
$config = array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'passconf',
'label' => 'Password Confirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
);
$this->form_validation->set_rules($config);
연결 규칙¶
CodeIgniter를 사용하면 여러 규칙을 파이프로 연결할 수 있습니다. 시도해 보겠습니다. 규칙 설정 메소드의 세 번째 매개변수에서 규칙을 다음과 같이 변경하세요:
$this->form_validation->set_rules(
'username', 'Username',
'required|min_length[5]|max_length[12]|is_unique[users.username]',
array(
'required' => 'You have not provided %s.',
'is_unique' => 'This %s already exists.'
)
);
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
위 코드는 다음 규칙을 설정합니다:
사용자 이름 필드는 5자 미만이 될 수 없고 12자를 초과할 수 없습니다.
비밀번호 필드는 비밀번호 확인 필드와 일치해야 합니다.
이메일 필드는 유효한 이메일 주소를 포함해야 합니다.
시도해 보세요! 적절한 데이터 없이 폼을 제출하면 새 규칙에 해당하는 새 오류 메시지가 표시됩니다. 유효성 검사 레퍼런스에서 확인할 수 있는 수많은 규칙이 있습니다.
참고
set_rules()에 문자열 대신 규칙 배열을 전달할 수도 있습니다.
예시:
$this->form_validation->set_rules('username', 'Username', array('required', 'min_length[5]'));
데이터 준비¶
위에서 사용한 것과 같은 유효성 검사 메소드 외에도 다양한 방법으로 데이터를 준비할 수 있습니다. 예를 들어 다음과 같이 규칙을 설정할 수 있습니다:
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
위 예시에서 필드를 “trim”하고, 필요한 경우 길이를 확인하며, 두 비밀번호 필드가 일치하는지 확인합니다.
하나의 매개변수를 허용하는 모든 기본 PHP 함수를 ``htmlspecialchars()``, ``trim()`` 등과 같이 규칙으로 사용할 수 있습니다.
참고
일반적으로 유효성 검사 규칙 후에 전처리 함수를 사용합니다. 오류가 있는 경우 원본 데이터가 폼에 표시되도록 하기 위해서입니다.
폼 재채우기¶
지금까지 오류만 다뤘습니다. 이제 폼 필드를 제출된 데이터로 다시 채울 때입니다. CodeIgniter는 이를 수행할 수 있는 여러 헬퍼 함수를 제공합니다. 가장 일반적으로 사용하는 것은:
set_value('field name')
myform.php 뷰 파일을 열고 set_value() 함수를 사용하여 각 필드의
value를 업데이트하세요:
:php:func:`set_value()` 함수 호출에 각 필드 이름을 포함하는 것을 잊지 마세요!
<html lang="en">
<head>
<title>My Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
이제 페이지를 다시 로드하고 폼을 제출하여 오류가 발생하도록 합니다. 폼 필드가 이제 다시 채워져야 합니다.
참고
아래의 클래스 레퍼런스 섹션에는 <select> 메뉴, 라디오 버튼 및 체크박스를 다시 채울 수 있는 메소드가 있습니다.
중요
폼 필드 이름으로 배열을 사용하는 경우 함수에 배열로 전달해야 합니다. 예시:
<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" />
자세한 내용은 아래의 필드 이름으로 배열 사용 섹션을 참조하세요.
콜백: 자체 유효성 검사 메소드¶
유효성 검사 시스템은 자체 유효성 검사 메소드에 대한 콜백을 지원합니다. 이를 통해 필요에 맞게 유효성 검사 클래스를 확장할 수 있습니다. 예를 들어 사용자가 고유한 사용자 이름을 선택하는지 확인하기 위해 데이터베이스 쿼리를 실행해야 하는 경우, 이를 수행하는 콜백 메소드를 만들 수 있습니다. 예시를 만들어 보겠습니다.
컨트롤러에서 “username” 규칙을 다음과 같이 변경하세요:
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
그런 다음 컨트롤러에 username_check()라는 새 메소드를 추가하세요.
컨트롤러가 이제 어떻게 보여야 하는지:
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
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;
}
}
}
폼을 다시 로드하고 사용자 이름으로 “test”를 입력하여 제출하세요. 폼 필드 데이터가 처리를 위해 콜백 메소드에 전달된 것을 확인할 수 있습니다.
콜백을 호출하려면 메소드 이름을 규칙으로 설정하고 “callback_”을 규칙 접두사로
사용하세요. 콜백 메소드에서 추가 매개변수를 받아야 하는 경우 메소드 이름 뒤에
대괄호 사이에 일반적으로 추가하세요: callback_foo[bar], 그러면 콜백 메소드의
두 번째 인수로 전달됩니다.
참고
콜백에 전달된 폼 데이터를 처리하고 반환할 수도 있습니다. 콜백이 불리언 TRUE/FALSE 이외의 것을 반환하면 해당 데이터가 새로 처리된 폼 데이터로 간주됩니다.
Callable: 무엇이든 규칙으로 사용¶
콜백 규칙이 충분하지 않은 경우(예: 컨트롤러로 제한되기 때문에), 커스텀 규칙을
만드는 방법이 하나 더 있습니다: is_callable()이 TRUE를 반환하는 모든 것.
다음 예시를 참고하세요:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
array($this->users_model, 'valid_username')
)
);
위 코드는 Users_model 오브젝트의 valid_username() 메소드를 사용합니다.
물론 이것은 단지 예시이며 콜백이 모델로 제한되지는 않습니다. 필드 값을 첫 번째 매개변수로 허용하는 오브젝트/메소드를 사용할 수 있습니다. 익명 함수도 사용할 수 있습니다:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
function($value)
{
// $value 확인
}
)
);
물론, Callable 규칙 자체는 문자열이 아니므로 규칙 이름도 아닙니다. 오류 메시지를 설정하려는 경우 이것이 문제입니다. 이 문제를 해결하기 위해 이러한 규칙을 배열의 두 번째 요소로, 첫 번째 요소는 규칙 이름으로 배치할 수 있습니다:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
array('username_callable', array($this->users_model, 'valid_username'))
)
);
익명 함수 버전:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
array(
'username_callable',
function($str)
{
// $str의 유효성을 확인하고 TRUE 또는 FALSE 반환
}
)
)
);
오류 메시지 설정¶
모든 기본 오류 메시지는 다음 언어 파일에 있습니다: system/language/english/form_validation_lang.php
규칙에 대한 전역 커스텀 메시지를 설정하려면 application/language/english/form_validation_lang.php에 자체 파일을 만들어 언어 파일을 확장/재정의하거나(언어 클래스 문서에서 자세히 읽어보세요), 다음 메소드를 사용하세요:
$this->form_validation->set_message('rule', 'Error Message');
특정 필드의 특정 규칙에 대한 커스텀 오류 메시지를 설정해야 하는 경우 set_rules() 메소드를 사용하세요:
$this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3',
array('rule2' => 'Error Message on rule2 for this field_name')
);
여기서 rule은 특정 규칙의 이름에 해당하고, Error Message는 표시할 텍스트입니다.
필드의 “사람이 읽을 수 있는” 이름이나 일부 규칙이 허용하는 선택적 매개변수(예: max_length)를 포함하려면 메시지에 {field}와 {param} 태그를 각각 추가할 수 있습니다:
$this->form_validation->set_message('min_length', '{field} must have at least {param} characters.');
Username의 사람이 읽을 수 있는 이름과 min_length[5] 규칙이 있는 필드에서 오류가 표시됩니다: “Username must have at least 5 characters.”
참고
오류 메시지에 %s를 사용하는 이전 sprintf() 방법은 여전히 작동하지만 위의 태그를 재정의합니다. 둘 중 하나를 사용해야 합니다.
위의 콜백 규칙 예시에서 오류 메시지는 메소드 이름(“callback_” 접두사 없이)을 전달하여 설정했습니다:
$this->form_validation->set_message('username_check')
필드 이름 번역¶
set_rules() 메소드에 전달한 “사람이 읽을 수 있는” 이름을 언어 파일에 저장하여
번역할 수 있게 하려면 다음과 같이 하세요:
먼저 “사람이 읽을 수 있는” 이름 앞에 lang:을 붙이세요:
$this->form_validation->set_rules('first_name', 'lang:first_name', 'required');
그런 다음 이름을 언어 파일 배열 중 하나에 저장하세요(접두사 없이):
$lang['first_name'] = 'First Name';
참고
CI에서 자동으로 로드하지 않는 언어 파일에 배열 항목을 저장하는 경우 컨트롤러에서 다음을 사용하여 로드하는 것을 기억하세요:
$this->lang->load('file_name');
언어 파일에 대한 자세한 내용은 언어 클래스 페이지를 참조하세요.
오류 구분자 변경¶
기본적으로 폼 유효성 검사 클래스는 표시된 각 오류 메시지 주위에 단락 태그(<p>)를 추가합니다. 이러한 구분자를 전역적으로, 개별적으로 또는 설정 파일에서 기본값을 변경할 수 있습니다.
전역적으로 구분자 변경 컨트롤러 메소드에서 폼 유효성 검사 클래스를 로드한 직후 다음을 추가하세요:
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
이 예시에서는 div 태그를 사용하도록 전환했습니다.
개별적으로 구분자 변경 이 튜토리얼에 표시된 두 오류 생성 함수 각각에 다음과 같이 자체 구분자를 제공할 수 있습니다:
<?php echo form_error('field name', '<div class="error">', '</div>'); ?>
또는:
<?php echo validation_errors('<div class="error">', '</div>'); ?>
설정 파일에서 구분자 설정 application/config/form_validation.php에서 다음과 같이 오류 구분자를 추가할 수 있습니다:
$config['error_prefix'] = '<div class="error_prefix">'; $config['error_suffix'] = '</div>';
오류 개별 표시¶
목록으로 표시하는 대신 각 폼 필드 옆에 오류 메시지를 표시하려면
form_error() 함수를 사용할 수 있습니다.
시도해 보세요! 폼을 다음과 같이 변경하세요:
<h5>Username</h5>
<?php echo form_error('username'); ?>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />
<h5>Password</h5>
<?php echo form_error('password'); ?>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />
<h5>Password Confirm</h5>
<?php echo form_error('passconf'); ?>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />
<h5>Email Address</h5>
<?php echo form_error('email'); ?>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
오류가 없으면 아무것도 표시되지 않습니다. 오류가 있으면 메시지가 표시됩니다.
중요
폼 필드 이름으로 배열을 사용하는 경우 함수에 배열로 전달해야 합니다. 예시:
<?php echo form_error('options[size]'); ?>
<input type="text" name="options[size]" value="<?php echo set_value("options[size]"); ?>" size="50" />
자세한 내용은 아래의 필드 이름으로 배열 사용 섹션을 참조하세요.
$_POST 이외의 배열 유효성 검사¶
때로는 $_POST 데이터에서 시작하지 않는 배열의 유효성을 검사해야 할 수도
있습니다.
이 경우 유효성을 검사할 배열을 지정할 수 있습니다:
$data = array(
'username' => 'johndoe',
'password' => 'mypassword',
'passconf' => 'mypassword'
);
$this->form_validation->set_data($data);
유효성 검사 규칙 만들기, 유효성 검사 실행, 오류 메시지 검색은 $_POST 데이터
또는 다른 배열의 유효성을 검사하든 동일하게 작동합니다.
중요
유효성 검사 규칙을 정의하기 전에 set_data() 메소드를 호출해야
합니다.
중요
단일 실행 중에 두 개 이상의 배열의 유효성을 검사하려면 새 배열의
규칙을 설정하고 유효성을 검사하기 전에 reset_validation() 메소드를 호출해야
합니다.
자세한 내용은 아래의 클래스 레퍼런스 섹션을 참조하세요.
설정 파일에 유효성 검사 규칙 저장¶
폼 유효성 검사 클래스의 훌륭한 기능은 전체 애플리케이션에 대한 모든 유효성 검사 규칙을 설정 파일에 저장할 수 있다는 것입니다. 이러한 규칙을 “그룹”으로 구성할 수 있습니다. 이러한 그룹은 일치하는 컨트롤러/메소드가 호출될 때 자동으로 로드되거나 필요에 따라 각 세트를 수동으로 호출할 수 있습니다.
규칙 저장 방법¶
유효성 검사 규칙을 저장하려면 application/config/ 폴더에 form_validation.php라는 파일을 만드세요. 해당 파일에 규칙이 포함된 $config라는 배열을 배치합니다. 이전에 표시된 것처럼 유효성 검사 배열은 다음 프로토타입을 가집니다:
$config = array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'Password Confirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
);
유효성 검사 규칙 파일은 자동으로 로드되고 run() 메소드를 호출할 때 사용됩니다.
$config 배열의 이름을 반드시 지정해야 합니다.
규칙 세트 만들기¶
규칙을 “세트”로 구성하려면 “하위 배열”에 배치해야 합니다. 다음 예시에서 “signup”과 “email”이라는 두 규칙 세트를 보여줍니다. 규칙 이름은 원하는 대로 지정할 수 있습니다:
$config = array(
'signup' => array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'Password Confirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
),
'email' => array(
array(
'field' => 'emailaddress',
'label' => 'EmailAddress',
'rules' => 'required|valid_email'
),
array(
'field' => 'name',
'label' => 'Name',
'rules' => 'required|alpha'
),
array(
'field' => 'title',
'label' => 'Title',
'rules' => 'required'
),
array(
'field' => 'message',
'label' => 'MessageBody',
'rules' => 'required'
)
)
);
특정 규칙 그룹 호출¶
특정 그룹을 호출하려면 해당 이름을 run() 메소드에 전달하세요. 예를 들어
signup 규칙을 호출하려면:
if ($this->form_validation->run('signup') == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
규칙 그룹과 컨트롤러 메소드 연결¶
규칙 그룹을 호출하는 대체(및 더 자동적인) 방법은 함께 사용할 컨트롤러 클래스/메소드에 따라 이름을 지정하는 것입니다. 예를 들어 Member라는 컨트롤러와 signup이라는 메소드가 있다고 가정합니다. 클래스는 다음과 같이 보일 수 있습니다:
<?php
class Member extends CI_Controller {
public function signup()
{
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
유효성 검사 설정 파일에서 규칙 그룹 이름을 member/signup으로 지정합니다:
$config = array(
'member/signup' => array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'PasswordConfirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
)
);
규칙 그룹이 컨트롤러 클래스/메소드와 동일하게 이름이 지정되면 해당 클래스/메소드에서
run() 메소드가 호출될 때 자동으로 사용됩니다.
유효성 검사/처리된 데이터 접근¶
기본적으로 유효성 검사는 $_POST 배열에서 직접 수행되며, 가능한 수정 사항(예:
공백 trim)은 다시 쓰여집니다. 그러나 원본 입력 데이터를 그대로 유지하거나
set_data()를 사용하여 커스텀 입력 세트를 전달한 경우, 이제 수정된 데이터를
가져오려고 할 것입니다. 이를 위해 run()의 두 번째 매개변수로 변수를 전달할
수 있습니다:
$input = array('name' => ' White Space ');
$output = NULL;
$this->form_validation->set_rules('name', 'Name', 'required|trim');
$this->form_validation->run(NULL, $output);
// $output은 이제 다음을 포함합니다: array('name' => 'White Space');
필드 이름으로 배열 사용¶
폼 유효성 검사 클래스는 필드 이름으로 배열 사용을 지원합니다. 다음 예시를 참고하세요:
<input type="text" name="options[]" value="" size="50" />
필드 이름으로 배열을 사용하는 경우 필드 이름을 요구하는 헬퍼 함수 와 유효성 검사 규칙 필드 이름에서 EXACT 배열 이름을 사용해야 합니다.
예를 들어 위 필드에 대한 규칙을 설정하려면:
$this->form_validation->set_rules('options[]', 'Options', 'required');
또는 위 필드에 대한 오류를 표시하려면:
<?php echo form_error('options[]'); ?>
또는 필드를 다시 채우려면:
<input type="text" name="options[]" value="<?php echo set_value('options[]'); ?>" size="50" />
다차원 배열을 필드 이름으로 사용할 수도 있습니다. 예시:
<input type="text" name="options[size]" value="" size="50" />
또는:
<input type="text" name="sports[nba][basketball]" value="" size="50" />
첫 번째 예시와 마찬가지로 헬퍼 함수에서 정확한 배열 이름을 사용해야 합니다:
<?php echo form_error('sports[nba][basketball]'); ?>
여러 옵션이 있는 체크박스(또는 기타 필드)를 사용하는 경우 모든 선택이 POST 배열에 추가될 수 있도록 각 옵션 뒤에 빈 괄호를 남기는 것을 잊지 마세요:
<input type="checkbox" name="options[]" value="red" />
<input type="checkbox" name="options[]" value="blue" />
<input type="checkbox" name="options[]" value="green" />
또는 다차원 배열을 사용하는 경우:
<input type="checkbox" name="options[color][]" value="red" />
<input type="checkbox" name="options[color][]" value="blue" />
<input type="checkbox" name="options[color][]" value="green" />
헬퍼 함수를 사용할 때 괄호도 포함하세요:
<?php echo form_error('options[color][]'); ?>
규칙 레퍼런스¶
다음은 사용 가능한 모든 기본 규칙 목록입니다:
규칙 |
매개변수 |
설명 |
예시 |
|---|---|---|---|
required |
아니오 |
폼 요소가 비어 있으면 FALSE를 반환합니다. |
|
matches |
예 |
폼 요소가 매개변수의 요소와 일치하지 않으면 FALSE를 반환합니다. |
matches[form_item] |
regex_match |
예 |
폼 요소가 정규 표현식과 일치하지 않으면 FALSE를 반환합니다. |
regex_match[/regex/] |
differs |
예 |
폼 요소가 매개변수의 요소와 다르지 않으면 FALSE를 반환합니다. |
differs[form_item] |
is_unique |
예 |
폼 요소가 매개변수의 테이블과 필드 이름에서 고유하지 않으면 FALSE를 반환합니다. 참고: 이 규칙은 작동하기 위해 Query Builder가 활성화되어야 합니다. |
is_unique[table.field] |
min_length |
예 |
폼 요소가 매개변수 값보다 짧으면 FALSE를 반환합니다. |
min_length[3] |
max_length |
예 |
폼 요소가 매개변수 값보다 길면 FALSE를 반환합니다. |
max_length[12] |
exact_length |
예 |
폼 요소가 매개변수 값과 정확히 일치하지 않으면 FALSE를 반환합니다. |
exact_length[8] |
greater_than |
예 |
폼 요소가 매개변수 값보다 작거나 같거나 숫자가 아니면 FALSE를 반환합니다. |
greater_than[8] |
greater_than_equal_to |
예 |
폼 요소가 매개변수 값보다 작거나 숫자가 아니면 FALSE를 반환합니다. |
greater_than_equal_to[8] |
less_than |
예 |
폼 요소가 매개변수 값보다 크거나 같거나 숫자가 아니면 FALSE를 반환합니다. |
less_than[8] |
less_than_equal_to |
예 |
폼 요소가 매개변수 값보다 크거나 숫자가 아니면 FALSE를 반환합니다. |
less_than_equal_to[8] |
in_list |
예 |
폼 요소가 미리 정해진 목록에 없으면 FALSE를 반환합니다. |
in_list[red,blue,green] |
alpha |
아니오 |
폼 요소에 알파벳 문자 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
alpha_numeric |
아니오 |
폼 요소에 알파뉴메릭 문자 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
alpha_numeric_spaces |
아니오 |
폼 요소에 알파뉴메릭 문자나 공백 이외의 것이 포함되어 있으면 FALSE를 반환합니다. 처음이나 끝의 공백을 방지하기 위해 trim 후에 사용해야 합니다. |
|
alpha_dash |
아니오 |
폼 요소에 알파뉴메릭 문자, 밑줄 또는 대시 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
numeric |
아니오 |
폼 요소에 숫자 문자 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
integer |
아니오 |
폼 요소에 정수 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
decimal |
아니오 |
폼 요소에 소수 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
is_natural |
아니오 |
폼 요소에 자연수(0, 1, 2, 3 등) 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
is_natural_no_zero |
아니오 |
폼 요소에 0이 아닌 자연수(1, 2, 3 등) 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
|
valid_url |
아니오 |
폼 요소에 유효한 URL이 포함되어 있지 않으면 FALSE를 반환합니다. |
|
valid_email |
아니오 |
폼 요소에 유효한 이메일 주소가 포함되어 있지 않으면 FALSE를 반환합니다. |
|
valid_emails |
아니오 |
쉼표로 구분된 목록에서 제공된 값이 유효한 이메일이 아니면 FALSE를 반환합니다. |
|
valid_ip |
예 |
제공된 IP 주소가 유효하지 않으면 FALSE를 반환합니다. IP 형식을 지정하기 위한 선택적 ‘ipv4’ 또는 ‘ipv6’ 매개변수를 허용합니다. |
|
valid_mac |
아니오 |
제공된 MAC 주소가 유효하지 않으면 FALSE를 반환합니다. |
|
valid_base64 |
아니오 |
제공된 문자열에 유효한 Base64 문자 이외의 것이 포함되어 있으면 FALSE를 반환합니다. |
참고
이러한 규칙은 개별 메소드로도 호출할 수 있습니다. 예시:
$this->form_validation->required($string);
참고
최소 하나가 필요한(필드 데이터를 전달하기 위해) 최대 두 개의 매개변수를 허용하는 모든 기본 PHP 함수를 사용할 수도 있습니다.
전처리 레퍼런스¶
다음은 사용 가능한 모든 전처리 메소드 목록입니다:
이름 |
매개변수 |
설명 |
|---|---|---|
prep_url |
아니오 |
URL에 “\http://”가 없으면 추가합니다. |
strip_image_tags |
아니오 |
이미지 태그에서 HTML을 제거하고 원시 URL만 남깁니다. |
encode_php_tags |
아니오 |
PHP 태그를 엔티티로 변환합니다. |
참고
하나의 매개변수를 허용하는 모든 기본 PHP 함수(trim(),
htmlspecialchars(), urldecode() 등)를 사용할 수도 있습니다.
클래스 레퍼런스¶
- class CI_Form_validation¶
- set_rules($field[, $label = null[, $rules = null[, $errors = array()]]])¶
- 매개변수:
$field (
string) – 필드 이름$label (
string) – 필드 레이블$rules (
mixed) – 파이프 “|”로 구분된 문자열 목록 또는 규칙 배열로 된 유효성 검사 규칙$errors (
array) – 커스텀 오류 메시지 목록
- 반환:
CI_Form_validation 인스턴스 (메소드 체이닝)
- Throws:
BadMethodCallException $field가 배열이 아니고 $rules가 사용되지 않은 경우
- 반환 형식:
위의 튜토리얼 섹션에 설명된 대로 유효성 검사 규칙을 설정할 수 있습니다:
- run([$config = NULL[, $data = NULL]])¶
- 매개변수:
$group (
string) – 실행할 유효성 검사 그룹 이름$data (
mixed) – 유효성 검사된 데이터를 할당할 선택적 변수
- 반환:
성공 시 TRUE, 유효성 검사 실패 시 FALSE
- 반환 형식:
bool
유효성 검사 루틴을 실행합니다. 성공 시 불리언 TRUE, 실패 시 FALSE를 반환합니다. 설정 파일에 유효성 검사 규칙 저장에 설명된 대로 선택적으로 메소드를 통해 유효성 검사 그룹 이름을 전달할 수 있습니다.
- set_message($lang[, $val = ''])¶
- 매개변수:
$lang (
string) – 메시지에 해당하는 규칙$val (
string) – 메시지
- 반환:
CI_Form_validation 인스턴스 (메소드 체이닝)
- 반환 형식:
커스텀 오류 메시지를 설정할 수 있습니다. 오류 메시지 설정 참조.
- set_error_delimiters([$prefix = '<p>'[, $suffix = '</p>']])¶
- 매개변수:
$prefix (
string) – 오류 메시지 접두사$suffix (
string) – 오류 메시지 접미사
- 반환:
CI_Form_validation 인스턴스 (메소드 체이닝)
- 반환 형식:
오류 메시지의 기본 접두사와 접미사를 설정합니다.
- set_data($data)¶
- 매개변수:
$data (
array) – 유효성 검사할 데이터 배열
- 반환:
CI_Form_validation 인스턴스 (메소드 체이닝)
- 반환 형식:
기본
$_POST배열 대신 유효성을 검사할 배열을 설정할 수 있습니다.
- reset_validation()¶
- 반환:
CI_Form_validation 인스턴스 (메소드 체이닝)
- 반환 형식:
두 개 이상의 배열의 유효성을 검사할 때 유효성 검사를 재설정할 수 있습니다. 이 메소드는 각 새 배열의 유효성을 검사하기 전에 호출해야 합니다.
- error_array()¶
- 반환:
오류 메시지 배열
- 반환 형식:
array
오류 메시지를 배열로 반환합니다.
- error_string([$prefix = ''[, $suffix = '']])¶
- 매개변수:
$prefix (
string) – 오류 메시지 접두사$suffix (
string) – 오류 메시지 접미사
- 반환:
문자열로 된 오류 메시지
- 반환 형식:
string
모든 오류 메시지(error_array()에서 반환된)를 문자열로 형식화하고 개행 문자로 구분하여 반환합니다.
- error($field[, $prefix = ''[, $suffix = '']])¶
- 매개변수:
$field (
string) – 필드 이름$prefix (
string) – 선택적 접두사$suffix (
string) – 선택적 접미사
- 반환:
오류 메시지 문자열
- 반환 형식:
string
특정 필드에 대한 오류 메시지를 반환하며, 선택적으로 접두사 및/또는 접미사를 추가합니다(일반적으로 HTML 태그).
- has_rule($field)¶
- 매개변수:
$field (
string) – 필드 이름
- 반환:
필드에 규칙이 설정되어 있으면 TRUE, 그렇지 않으면 FALSE
- 반환 형식:
bool
지정된 필드에 규칙이 설정되어 있는지 확인합니다.
헬퍼 레퍼런스¶
다음 함수에 대한 폼 헬퍼 매뉴얼을 참조하세요:
이것들은 절차적 함수이므로 $this->form_validation을 앞에 붙일 필요가
없습니다.