FuelPHP - Programmazione avanzata dei moduli
FuelPHP fornisce una programmazione avanzata dei moduli tramite le classi Fieldset e Fieldset_Field. Fieldsetfornisce un modo orientato agli oggetti per creare un modulo. Ha il supporto completo per i modelli. Ha anche il supporto integrato per la convalida lato client e lato server. Per creare un modulo a tutti gli effetti, è sufficiente creare un modello con la forma e l'impostazione di convalida appropriate. Impariamo a conoscere la classe Fieldset e come creare un modulo utilizzandolo in questo capitolo.
Fieldset
Fieldset è una raccolta di Fieldset_Fieldoggetti. Fieldset_Field definisce la singola voce di un modulo come nome, cognome, ecc. Insieme alle convalide. La classe Fieldset ha metodi per aggiungere / modificare / rimuovere i campi. Ha opzioni per identificare i campi definiti in un modello e creare i campi dal modello dato.Fieldsetusa le classi Form e Validation in background per fare il vero lavoro. Vediamo alcuni dei metodi importanti della classe Fieldset.
fucina
forgecrea una nuova istanza Fieldset. Ha i seguenti due parametri:
$name - identificatore per il fieldset
$config- array di configurazione. Le opzioni possibili sono validation_instance e form_instance. validation_instance può avere un oggetto Validation e form_instance può avere un oggetto Form.
$employee_form = Fieldset::forge('employee');
esempio
instance restituisce l'istanza Fieldset creata in precedenza per identificatore.
$employee_form = Fieldset::instance('employee');
get_name
Ottiene l'identificatore dell'istanza fieldset.
$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();
Inserisci
addcrea una nuova istanza Fieldset_Field e la aggiunge al fieldset corrente. Contiene i seguenti quattro parametri,
$name - nome del campo
$label - etichetta per il campo
$attributes - Attributi dei tag HTML
$rules - regole di convalida
$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 è simile a add, tranne per il fatto che ha un parametro aggiuntivo per specificare il campo prima del quale verrà aggiunto il campo appena creato.
$employee_form->add_before (
'employee_firstname',
'Firstname',
array ('class' => 'pretty_input'),
array(),
'employee_lastname'
);
Elimina
delete elimina il campo specificato dal fieldset.
$employee_form->delete('employee_firstname');
campo
field ottiene tutti i campi o quello specificato dal fieldset.
$fields = $employee_form->field();
$lastname_field = $employee_form->field('employee_lastname');
costruire
buildè un alias per $ this-> form () -> build () . Genera il markup HTML del modulo.
$employee_form->build(Uri::create('employee/add'));
abilitare
enable riattiva un campo precedentemente disabilitato.
$employee_form->enable('employee_firstname');
disattivare
disable consente di disabilitare la creazione di un campo nel fieldset.
$employee_form->disable('employee_firstname');
modulo
form restituisce l'istanza Form del fieldset corrente.
$form = employee_form->form();
add_model
add_model aggiunge il campo del modello al fieldset. Ha i seguenti tre parametri,
$class - nome della classe
$instance - istanza della classe per popolare i campi con valore
$method- nome del metodo nella classe. Questo metodo viene utilizzato per aggiungere campi nel fieldset. Orm \ Model ha il metodo richiesto. Il nome del metodo predefinito è set_form_fields.
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');
popolare
populate imposta il valore iniziale dei campi in fieldset utilizzando l'istanza del modello.
$emp = new Model_Employee();
$emp->name = "Jon";
$employee_form->populate($emp);
ripopolare
repopulate è uguale a popola, tranne che ripopola i campi nel fieldset.
validazione
validation ottiene l'istanza di convalida del fieldset corrente.
$validation = $employee_form->validation();
convalidato
Alias per $ this-> validation () -> validated ().
input
Alias per $ this-> validation () -> input ().
error
Alias per $ this-> validation () -> error ().
show_errors
Alias per $ this-> validation () -> show_errors ().
Esempio di lavoro
Creiamo un modulo avanzato per aggiungere un nuovo dipendente nella nostra applicazione dipendente di esempio utilizzando la classe Fieldset.
Aggiorna modello
Aggiorna il modello dei dipendenti con le regole di convalida necessarie e aggiungi un osservatore di convalida come segue.
<?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')));
}
Qui, abbiamo definito le regole di convalida per i campi nome ed età e aggiunto un nuovo osservatore per eseguire la convalida lato server prima di salvare il modello nel database. La stessa regola di convalida creerà gli attributi di convalida dell'input necessari anche nel modulo.
Crea modulo
Creare una nuova azione, action_advancedform nel controller dei dipendenti come segue.
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));
}
Qui, abbiamo creato il modulo utilizzando fieldset e inviato il modulo alla visualizzazione. Quindi, aggiungi la vista per l'azione,fuel/app/views/employee/advancedform.php come segue.
<!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>
Ora, richiedendo la pagina http://localhost:8080/employee/add mostrerà il seguente modulo.
Modulo di processo
Aggiornare il metodo di azione, action_advancedform per elaborare il modulo e aggiungere i dati del dipendente immessi dall'utente nel database nel controller dei dipendenti come segue.
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);
}
Qui, siamo stati reindirizzati alla pagina dell'elenco dei dipendenti, una volta che i dati inseriti dall'utente sono stati convalidati e salvati nel database. Altrimenti, ci verrà mostrato nuovamente il modulo.
Crea il modulo
Ora, richiedi l'URL, http://localhost:8080/employee/adde inserisci alcuni dati del dipendente e invia il modulo. Se i dati non vengono forniti, il modulo chiederà all'utente di inserire i dati come mostrato nella seguente schermata.
Se l'utente ignora la convalida lato client, il server convaliderà il modulo e mostrerà un errore come mostrato nello screenshot seguente.
Se i dati hanno superato la convalida lato client e server, i dati dei dipendenti verranno salvati nel database e la pagina verrà reindirizzata alla pagina dell'elenco.