FuelPHP-고급 양식 프로그래밍
FuelPHP는 Fieldset 및 Fieldset_Field 클래스를 통해 고급 양식 프로그래밍을 제공합니다. Fieldset양식을 만드는 객체 지향 방법을 제공합니다. 모델을 완벽하게 지원합니다. 클라이언트 측 및 서버 측 유효성 검사도 기본적으로 지원합니다. 본격적인 양식을 만들려면 적절한 양식과 유효성 검사 설정으로 모델을 만드는 것으로 충분합니다. 이 장에서 Fieldset 클래스와이를 사용하여 폼을 만드는 방법에 대해 알아 보겠습니다.
필드 셋
Fieldset은 Fieldset_Field사물. Fieldset_Field는 유효성 검사와 함께 이름, 성 등과 같은 양식의 개별 항목을 정의합니다. Fieldset 클래스에는 필드를 추가 / 편집 / 제거하는 메서드가 있습니다. 모델에 정의 된 필드를 식별하고 주어진 모델에서 필드를 생성하는 옵션이 있습니다.Fieldset실제 작업을 수행하기 위해 백그라운드에서 Form 및 Validation 클래스를 사용합니다. Fieldset 클래스의 몇 가지 중요한 메서드를 살펴 보겠습니다.
단조 공장
forge새 Fieldset 인스턴스를 만듭니다. 다음 두 가지 매개 변수가 있습니다.
$name − 필드 셋 식별자
$config− 구성 배열. 가능한 옵션은 validation_instance 및 form_instance입니다. validation_instance 는 Validation 객체를 가질 수 있고 form_instance 는 Form 객체를 가질 수 있습니다.
$employee_form = Fieldset::forge('employee');
예
instance 이전에 생성 된 Fieldset 인스턴스를 식별자로 반환합니다.
$employee_form = Fieldset::instance('employee');
get_name
fieldset 인스턴스의 식별자를 가져옵니다.
$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();
더하다
add새 Fieldset_Field 인스턴스를 만들고 현재 fieldset에 추가합니다. 다음 네 가지 매개 변수가 포함됩니다.
$name − 필드 이름
$label − 필드 레이블
$attributes − HTML 태그 속성
$rules − 유효성 검사 규칙
$employee_field = $employee_form-> add (
'employee_lastname',
'Lastname',
array ('class' => 'pretty_input')
);
// with validation rules
$employee_form->add (
'email', 'E-mail',
array('type' => 'email', 'class' => 'pretty_input'),
array('required', 'valid_email')
);
add_before
add_before는 새로 생성 된 필드가 추가되기 전에 필드를 지정하는 하나의 추가 매개 변수가 있다는 점을 제외하면 add와 유사합니다.
$employee_form->add_before (
'employee_firstname',
'Firstname',
array ('class' => 'pretty_input'),
array(),
'employee_lastname'
);
지우다
delete fieldset에서 지정된 필드를 삭제합니다.
$employee_form->delete('employee_firstname');
들
field 모든 필드를 가져 오거나 fieldset에서 지정된 필드를 가져옵니다.
$fields = $employee_form->field();
$lastname_field = $employee_form->field('employee_lastname');
짓다
build$ this-> form ()-> build ()의 별칭입니다 . 양식의 HTML 마크 업을 생성합니다.
$employee_form->build(Uri::create('employee/add'));
활성화
enable 이전에 비활성화 된 필드를 다시 활성화합니다.
$employee_form->enable('employee_firstname');
비활성화
disable 필드 세트의 필드가 빌드되지 않도록 할 수 있습니다.
$employee_form->disable('employee_firstname');
형태
form 현재 fieldset의 Form 인스턴스를 반환합니다.
$form = employee_form->form();
add_model
add_model은 모델의 필드를 fieldset에 추가합니다. 다음 세 가지 매개 변수가 있습니다.
$class − 클래스 이름
$instance − 필드를 값으로 채울 클래스의 인스턴스
$method− 클래스의 메서드 이름. 이 메서드는 필드 세트에 필드를 추가하는 데 사용됩니다. Orm \ Model에는 필요한 방법이 있습니다. 기본 메소드 이름은 set_form_fields입니다.
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');
채우다
populate 모델 인스턴스를 사용하여 fieldset에서 필드의 초기 값을 설정합니다.
$emp = new Model_Employee();
$emp->name = "Jon";
$employee_form->populate($emp);
다시 채우다
repopulate 필드 세트의 필드를 다시 채운다는 점을 제외하면 채우기와 동일합니다.
확인
validation 현재 fieldset의 유효성 검사 인스턴스를 가져옵니다.
$validation = $employee_form->validation();
검증 됨
$ this-> validation ()-> validated ()의 별칭입니다.
input
$ this-> validation ()-> input ()에 대한 별칭.
error
$ this-> validation ()-> error ()의 별칭.
show_errors
$ this-> validation ()-> show_errors ()에 대한 별칭.
작업 예
Fieldset 클래스를 사용하여 샘플 직원 애플리케이션에 새 직원을 추가하는 고급 양식을 만들어 보겠습니다.
모델 업데이트
필요한 유효성 검사 규칙으로 직원 모델을 업데이트하고 다음과 같이 유효성 검사 관찰자를 추가합니다.
<?php
class Model_Employee extends Orm\Model {
protected static $_connection = 'production';
protected static $_table_name = 'employee';
protected static $_primary_key = array('id');
protected static $_properties = array (
'id',
'name' => array (
'data_type' => 'varchar',
'label' => 'Employee Name',
'validation' => array (
'required',
'min_length' => array(3),
'max_length' => array(80)
),
'form' => array (
'type' => 'text'
),
),
'age' => array (
'data_type' => 'int',
'label' => 'Employee Age',
'validation' => array (
'required',
),
'form' => array ('type' => 'text' ),
),
);
// Just add the Observer, and define the required event
protected static $_observers = array('Orm\\Observer_Validation' => array (
'events' => array('before_save')));
}
여기에서 이름 및 연령 필드에 대한 유효성 검사 규칙을 정의하고 모델을 데이터베이스에 저장하기 전에 서버 측 유효성 검사를 수행 할 새 관찰자를 추가했습니다. 동일한 유효성 검사 규칙은 양식에 필요한 입력 유효성 검사 속성도 생성합니다.
양식 작성
다음과 같이 직원 컨트롤러에 새로운 액션 action_advancedform을 생성합니다.
public function action_advancedform() {
// create a new fieldset and add employee model
$fieldset = Fieldset::forge('employee')->add_model('Model_Employee');
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
// build the form and set the current page as action
$formHtml = $fieldset->build(Uri::create('employee/advancedform'));
// set form in data
$data = array();
$data['form'] = $formHtml;
return Response::forge(View::forge('employee/advancedform', $data, false));
}
여기서는 fieldset을 사용하여 양식을 만들고보기로 양식을 보냅니다. 다음으로 작업에 대한보기를 추가하고fuel/app/views/employee/advancedform.php 다음과 같이.
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Employee :: add page</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width = device-width, initial-scale = 1">
<?php echo Asset::css('bootstrap.css'); ?>
<style>
table {
width: 90%;
}
table tr {
width: 90%
}
table tr td {
width: 50%
}
input[type = text], select {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
input[type = submit] {
width: 100%;
background-color: #3c3c3c;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
</head>
<body>
<div class = "container">
<?php
if(isset($errors)) {
echo $errors;
}
echo $form;
?>
</div>
</body>
</html>
이제 페이지 요청 http://localhost:8080/employee/add 다음 양식이 표시됩니다.
프로세스 양식
다음 과 같이 양식을 처리하고 사용자가 입력 한 직원 데이터를 직원 컨트롤러의 데이터베이스에 추가하기 위해 액션 메서드 action_advancedform 을 업데이트합니다 .
public function action_advancedform() {
// create a new fieldset and add employee model
$fieldset = Fieldset::forge('employee')->add_model('Model_Employee');
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
// build the form and set the current page as action
$formHtml = $fieldset->build(Uri::create('employee/advancedform'));
if (Input::param() != array()) {
try {
$article = Model_Employee::forge();
$article->name = Input::param('name');
$article->url = Input::param('age');
$article->save();
Response::redirect('employee/list');
}
catch (Orm\ValidationFailed $e) {
$view = View::forge('employee/advancedform');
$view->set('form', $formHtml, false);
$view->set('errors', $e->getMessage(), false);
}
}
return Response::forge($view);
}
여기서는 사용자가 입력 한 데이터를 확인하고 데이터베이스에 저장하면 직원 목록 페이지로 리디렉션되었습니다. 그렇지 않으면 양식이 다시 표시됩니다.
양식 만들기
이제 URL을 요청하고 http://localhost:8080/employee/add직원 데이터를 입력하고 양식을 제출하십시오. 데이터가 제공되지 않은 경우 양식은 다음 스크린 샷과 같이 사용자에게 데이터를 입력하라는 메시지를 표시합니다.
사용자가 클라이언트 측 유효성 검사를 우회하면 서버는 다음 스크린 샷과 같이 양식의 유효성을 검사하고 오류를 표시합니다.
데이터가 클라이언트 및 서버 측 유효성 검사를 통과하면 직원 데이터가 데이터베이스에 저장되고 페이지가 목록 페이지로 리디렉션됩니다.