FuelPHP - Zaawansowane programowanie formularzy
FuelPHP zapewnia zaawansowane programowanie formularzy za pomocą klas Fieldset i Fieldset_Field. Fieldsetzapewnia obiektowy sposób tworzenia formularza. Posiada pełne wsparcie dla modeli. Posiada również wbudowaną obsługę walidacji po stronie klienta i po stronie serwera. Aby stworzyć pełnoprawny formularz, wystarczy stworzyć model z odpowiednią formą i ustawieniami walidacji. Z tego rozdziału dowiemy się o klasie Fieldset i tworzeniu formularza za jej pomocą.
Zestaw pól
Zestaw pól to zbiór Fieldset_Fieldobiekty. Fieldset_Field definiuje indywidualny wpis w formularzu, taki jak imię, nazwisko itp. Wraz z walidacjami. Klasa Fieldset zawiera metody dodawania / edycji / usuwania pól. Posiada opcje identyfikacji zmiennych zdefiniowanych w modelu i tworzenia zmiennych z danego modelu.Fieldsetużywa klas Form i Validation w tle, aby wykonać prawdziwą pracę. Zobaczmy niektóre z ważnych metod klasy Fieldset.
fałszować
forgetworzy nową instancję Fieldset. Ma następujące dwa parametry -
$name - identyfikator zestawu pól
$config- tablica konfiguracyjna. Możliwe opcje to validation_instance i form_instance. validation_instance może mieć obiekt Validation, a form_instance może mieć obiekt Form.
$employee_form = Fieldset::forge('employee');
instancja
instance zwraca poprzednio utworzoną instancję zestawu pól według identyfikatora.
$employee_form = Fieldset::instance('employee');
get_name
Pobiera identyfikator wystąpienia zestawu pól.
$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();
Dodaj
addtworzy nową instancję Fieldset_Field i dodaje ją do bieżącego zestawu pól. Zawiera następujące cztery parametry,
$name - nazwa pola
$label - etykieta pola
$attributes - Atrybuty znaczników HTML
$rules - zasady walidacji
$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')
);
Dodaj przed
add_before jest podobne do add, z wyjątkiem tego, że ma jeden dodatkowy parametr do określenia pola, przed którym zostanie dodane nowo utworzone pole.
$employee_form->add_before (
'employee_firstname',
'Firstname',
array ('class' => 'pretty_input'),
array(),
'employee_lastname'
);
usunąć
delete usuwa określone pole z zestawu pól.
$employee_form->delete('employee_firstname');
pole
field pobiera wszystkie pola lub określony z zestawu pól.
$fields = $employee_form->field();
$lastname_field = $employee_form->field('employee_lastname');
budować
buildjest aliasem dla $ this-> form () -> build () . Generuje znaczniki HTML formularza.
$employee_form->build(Uri::create('employee/add'));
włączyć
enable ponownie włącza pole, które zostało wcześniej wyłączone.
$employee_form->enable('employee_firstname');
wyłączyć
disable pozwala wyłączyć budowanie pola w zestawie pól.
$employee_form->disable('employee_firstname');
Formularz
form zwraca wystąpienie Form bieżącego zestawu pól.
$form = employee_form->form();
add_model
add_model dodaje pole modelu do zestawu pól. Ma następujące trzy parametry,
$class - nazwa klasy
$instance - instancja klasy do wypełnienia pól wartością
$method- nazwa metody w klasie. Ta metoda służy do dodawania pól do zestawu pól. Orm \ Model ma wymaganą metodę. Domyślna nazwa metody to set_form_fields.
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');
zaludniać
populate ustawia początkową wartość pól w zestawie pól przy użyciu wystąpienia modelu.
$emp = new Model_Employee();
$emp->name = "Jon";
$employee_form->populate($emp);
zaludnij ponownie
repopulate działa tak samo jak populate, z tą różnicą, że ponownie wypełnia pola w zestawie pól.
uprawomocnienie
validation pobiera wystąpienie walidacyjne bieżącego zestawu pól.
$validation = $employee_form->validation();
zwalidowany
Alias dla $ this-> validation () -> validated ().
input
Alias dla $ this-> validation () -> input ().
error
Alias dla $ this-> validation () -> error ().
show_errors
Alias dla $ this-> validation () -> show_errors ().
Przykład roboczy
Stwórzmy zaawansowany formularz dodawania nowego pracownika w naszej przykładowej aplikacji pracowniczej przy użyciu klasy Fieldset.
Zaktualizuj model
Zaktualizuj model pracownika o niezbędne reguły walidacji i dodaj obserwatora walidacji w następujący sposób.
<?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')));
}
Tutaj zdefiniowaliśmy reguły walidacji dla pól nazwiska i wieku oraz dodaliśmy nowego obserwatora do przeprowadzania walidacji po stronie serwera przed zapisaniem modelu w bazie danych. Ta sama reguła walidacji utworzy niezbędne atrybuty walidacji danych wejściowych również w formularzu.
Utwórz formularz
Utwórz nową akcję, action_advancedform w kontrolerze pracownika w następujący sposób.
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));
}
Tutaj utworzyliśmy formularz przy użyciu zestawu pól i wysłaliśmy formularz do widoku. Następnie dodaj widok akcji,fuel/app/views/employee/advancedform.php następująco.
<!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>
Teraz prosząc o stronę http://localhost:8080/employee/add pokaże następujący formularz.
Formularz procesu
Zaktualizuj metodę akcji, action_advancedform, aby przetworzyć formularz i dodać dane pracownika wprowadzone przez użytkownika do bazy danych w kontrolerze pracowników w następujący sposób.
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);
}
Tutaj zostaliśmy przekierowani na stronę z listą pracowników, kiedy dane wprowadzone przez użytkownika są sprawdzane i zapisywane w bazie danych. W przeciwnym razie ponownie pojawi się formularz.
Utwórz formularz
Teraz poproś o adres URL, http://localhost:8080/employee/addwprowadź dane pracownika i wyślij formularz. Jeśli dane nie zostaną podane, formularz poprosi użytkownika o wprowadzenie danych, jak pokazano na poniższym zrzucie ekranu.
Jeśli użytkownik pominie weryfikację po stronie klienta, serwer zweryfikuje formularz i wyświetli błąd, jak pokazano na poniższym zrzucie ekranu.
Jeśli dane przeszły walidację po stronie klienta i serwera, to dane pracowników zostaną zapisane w bazie danych, a strona zostanie przekierowana na stronę listy.