FuelPHP - Erweiterte Formularprogrammierung
FuelPHP bietet eine erweiterte Formularprogrammierung über die Klassen Fieldset und Fieldset_Field. Fieldsetbietet eine objektorientierte Möglichkeit zum Erstellen eines Formulars. Es hat vollständige Unterstützung für Modelle. Es bietet integrierte Unterstützung für die clientseitige und serverseitige Validierung. Um ein vollwertiges Formular zu erstellen, reicht es aus, ein Modell mit der richtigen Formular- und Validierungseinstellung zu erstellen. In diesem Kapitel erfahren Sie mehr über die Fieldset-Klasse und wie Sie mit ihr ein Formular erstellen.
Fieldset
Fieldset ist eine Sammlung von Fieldset_FieldObjekte. Fieldset_Field definiert den individuellen Eintrag eines Formulars wie Vorname, Nachname usw. zusammen mit Validierungen. Die Fieldset-Klasse verfügt über Methoden zum Hinzufügen / Bearbeiten / Entfernen von Feldern. Es bietet Optionen zum Identifizieren der in einem Modell definierten Felder und zum Erstellen der Felder aus dem angegebenen Modell.FieldsetVerwendet Form- und Validierungsklassen im Hintergrund, um die eigentliche Arbeit zu erledigen. Sehen wir uns einige wichtige Methoden der Fieldset-Klasse an.
Schmiede
forgeErstellt eine neue Fieldset-Instanz. Es hat die folgenden zwei Parameter -
$name - Kennung für das Feldset
$config- Konfigurationsarray. Mögliche Optionen sind validation_instance und form_instance. validation_instance kann ein Validierungsobjekt haben und form_instance kann ein Formobjekt haben.
$employee_form = Fieldset::forge('employee');
Beispiel
instance Gibt die zuvor erstellte Fieldset-Instanz nach Bezeichner zurück.
$employee_form = Fieldset::instance('employee');
get_name
Ruft die Kennung der Feldsatzinstanz ab.
$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();
hinzufügen
addErstellt eine neue Fieldset_Field-Instanz und fügt sie dem aktuellen Fieldset hinzu. Es enthält die folgenden vier Parameter:
$name - Name des Feldes
$label - Beschriftung für das Feld
$attributes - HTML-Tag-Attribute
$rules - Validierungsregeln
$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')
);
füge vorher hinzu
add_before ähnelt add, außer dass es einen zusätzlichen Parameter gibt, um das Feld anzugeben, vor dem das neu erstellte Feld hinzugefügt wird.
$employee_form->add_before (
'employee_firstname',
'Firstname',
array ('class' => 'pretty_input'),
array(),
'employee_lastname'
);
löschen
delete löscht das angegebene Feld aus dem Feldsatz.
$employee_form->delete('employee_firstname');
Feld
field Ruft entweder alle oder die angegebenen Felder aus dem Feldsatz ab.
$fields = $employee_form->field();
$lastname_field = $employee_form->field('employee_lastname');
bauen
buildist ein Alias für $ this-> form () -> build () . Erzeugt das HTML-Markup des Formulars.
$employee_form->build(Uri::create('employee/add'));
aktivieren
enable Aktiviert ein zuvor deaktiviertes Feld erneut.
$employee_form->enable('employee_firstname');
deaktivieren
disable Ermöglicht das Deaktivieren der Erstellung eines Felds in der Feldgruppe.
$employee_form->disable('employee_firstname');
bilden
form Gibt die Formularinstanz des aktuellen Feldsatzes zurück.
$form = employee_form->form();
add_model
add_model fügt das Feld des Modells in das Feldset ein. Es hat die folgenden drei Parameter:
$class - Klassenname
$instance - Instanz der Klasse zum Auffüllen der Felder mit Wert
$method- Name der Methode in der Klasse. Diese Methode wird verwendet, um Felder zum Feldsatz hinzuzufügen. Orm \ Model hat die erforderliche Methode. Der Standardmethodenname lautet set_form_fields.
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');
bevölkern
populate Legt den Anfangswert der Felder im Feldsatz mithilfe der Modellinstanz fest.
$emp = new Model_Employee();
$emp->name = "Jon";
$employee_form->populate($emp);
neu bevölkern
repopulate ist dasselbe wie "Auffüllen", außer dass die Felder in der Feldmenge neu aufgefüllt werden.
Validierung
validation Ruft die Validierungsinstanz des aktuellen Feldsatzes ab.
$validation = $employee_form->validation();
bestätigt
Alias für $ this-> validation () -> validated ().
input
Alias für $ this-> validation () -> input ().
error
Alias für $ this-> validation () -> error ().
show_errors
Alias für $ this-> validation () -> show_errors ().
Arbeitsbeispiel
Erstellen Sie ein erweitertes Formular, um mithilfe der Fieldset-Klasse einen neuen Mitarbeiter in unsere Beispielanwendung für Mitarbeiter aufzunehmen.
Modell aktualisieren
Aktualisieren Sie das Mitarbeitermodell mit den erforderlichen Validierungsregeln und fügen Sie wie folgt einen Validierungsbeobachter hinzu.
<?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')));
}
Hier haben wir die Validierungsregeln für Namens- und Altersfelder definiert und einen neuen Beobachter hinzugefügt, um die serverseitige Validierung durchzuführen, bevor das Modell in der Datenbank gespeichert wird. Mit derselben Validierungsregel werden auch die erforderlichen Eingabevalidierungsattribute im Formular erstellt.
Formular erstellen
Erstellen Sie die neue Aktion action_advancedform im Mitarbeiter-Controller wie folgt.
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));
}
Hier haben wir das Formular mit fieldset erstellt und das Formular an die Ansicht gesendet. Fügen Sie als Nächstes die Ansicht für die Aktion hinzu.fuel/app/views/employee/advancedform.php wie folgt.
<!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>
Nun fordern Sie die Seite an http://localhost:8080/employee/add zeigt das folgende Formular.
Formular bearbeiten
Aktualisieren Sie die Aktionsmethode action_advancedform , um das Formular zu verarbeiten, und fügen Sie die vom Benutzer eingegebenen Mitarbeiterdaten wie folgt in die Datenbank des Mitarbeiter-Controllers ein.
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);
}
Hier wurden wir zur Mitarbeiterlistenseite weitergeleitet, sobald die vom Benutzer eingegebenen Daten validiert und in der Datenbank gespeichert wurden. Andernfalls wird uns das Formular erneut angezeigt.
Erstellen Sie das Formular
Fordern Sie jetzt die URL an. http://localhost:8080/employee/addGeben Sie einige Mitarbeiterdaten ein und senden Sie das Formular ab. Wenn die Daten nicht angegeben werden, fordert das Formular den Benutzer auf, die Daten wie im folgenden Screenshot gezeigt einzugeben.
Wenn der Benutzer die clientseitige Überprüfung umgeht, überprüft der Server das Formular und zeigt einen Fehler an, wie im folgenden Screenshot gezeigt.
Wenn die Daten die clientseitige und serverseitige Validierung bestanden haben, werden die Mitarbeiterdaten in der Datenbank gespeichert und die Seite wird zur Listenseite umgeleitet.