FuelPHP - Programação de formulário avançado
FuelPHP fornece uma programação avançada de formulário por meio das classes Fieldset e Fieldset_Field. Fieldsetfornece uma maneira orientada a objetos para criar um formulário. Possui suporte completo para modelos. Ele possui suporte integrado para validação do lado do cliente e do lado do servidor também. Para criar um formulário completo, é suficiente criar um modelo com formato e configuração de validação adequados. Vamos aprender sobre a classe Fieldset e como criar um formulário usando-a neste capítulo.
Fieldset
Fieldset é uma coleção de Fieldset_Fieldobjetos. Fieldset_Field define a entrada individual de um formulário, como nome, sobrenome, etc. junto com as validações. A classe Fieldset possui métodos para adicionar / editar / remover campos. Possui opções para identificar os campos definidos em um modelo e criar os campos a partir do modelo fornecido.Fieldsetusa classes Form e Validation em segundo plano para fazer o trabalho real. Vejamos alguns dos métodos importantes da classe Fieldset.
forja
forgecria uma nova instância Fieldset. Ele tem os seguintes dois parâmetros -
$name - identificador para o fieldset
$config- array de configuração. As opções possíveis são validation_instance e form_instance. validation_instance pode ter Validação objeto e form_instance pode ter objeto Form.
$employee_form = Fieldset::forge('employee');
instância
instance retorna a instância Fieldset criada anteriormente por identificador.
$employee_form = Fieldset::instance('employee');
get_name
Obtém o identificador da instância fieldset.
$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();
adicionar
addcria uma nova instância Fieldset_Field e a adiciona ao fieldset atual. Ele contém os quatro parâmetros a seguir,
$name - nome do campo
$label - etiqueta para o campo
$attributes - atributos de tag HTML
$rules - regras de validação
$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')
);
acrescentar antes
add_before é semelhante a add, exceto por ter um parâmetro extra para especificar o campo antes do qual o campo recém-criado será adicionado.
$employee_form->add_before (
'employee_firstname',
'Firstname',
array ('class' => 'pretty_input'),
array(),
'employee_lastname'
);
excluir
delete exclui o campo especificado do fieldset.
$employee_form->delete('employee_firstname');
campo
field obtém todos os campos ou o especificado do fieldset.
$fields = $employee_form->field();
$lastname_field = $employee_form->field('employee_lastname');
Construir
buildé um apelido para $ this-> form () -> build () . Gera a marcação HTML do formulário.
$employee_form->build(Uri::create('employee/add'));
habilitar
enable reativa um campo que foi desativado anteriormente.
$employee_form->enable('employee_firstname');
desabilitar
disable permite desabilitar a construção de um campo no conjunto de campos.
$employee_form->disable('employee_firstname');
Formato
form retorna a instância de Form do fieldset atual.
$form = employee_form->form();
add_model
add_model adiciona o campo do modelo ao fieldset. Ele tem os três parâmetros a seguir,
$class - nome da classe
$instance - instância da classe para preencher os campos com valor
$method- nome do método na classe. Este método é usado para adicionar campos ao fieldset. Orm \ Model tem o método necessário. O nome do método padrão é set_form_fields.
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');
povoar
populate define o valor inicial dos campos em fieldset usando instância de modelo.
$emp = new Model_Employee();
$emp->name = "Jon";
$employee_form->populate($emp);
repovoar
repopulate é o mesmo que preencher, exceto que preenche novamente os campos no conjunto de campos.
validação
validation obtém a instância de validação do fieldset atual.
$validation = $employee_form->validation();
validado
Alias para $ this-> validation () -> validated ().
input
Alias para $ this-> validation () -> input ().
error
Alias para $ this-> validation () -> error ().
show_errors
Alias para $ this-> validation () -> show_errors ().
Exemplo de Trabalho
Vamos criar um formulário avançado para adicionar novos funcionários em nosso aplicativo de amostra de funcionários usando a classe Fieldset.
Atualizar modelo
Atualize o modelo de funcionário com as regras de validação necessárias e adicione um observador de validação como 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')));
}
Aqui, definimos as regras de validação para os campos de nome e idade e adicionamos um novo observador para realizar a validação do lado do servidor antes de salvar o modelo no banco de dados. A mesma regra de validação criará atributos de validação de entrada necessários também no formulário.
Criar formulário
Crie uma nova ação, action_advancedform no controlador de funcionário como 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));
}
Aqui, criamos o formulário usando fieldset e enviamos o formulário para a visualização. Em seguida, adicione uma visão para a ação,fuel/app/views/employee/advancedform.php do seguinte modo.
<!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>
Agora, solicitando a página http://localhost:8080/employee/add irá mostrar o seguinte formulário.
Formulário de Processo
Atualize o método de ação, action_advancedform para processar o formulário e adicionar os dados do funcionário inseridos pelo usuário no banco de dados no controlador de funcionário da seguinte maneira.
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);
}
Aqui, fomos redirecionados para a página de lista de funcionários, uma vez que os dados inseridos pelo usuário são validados e salvos no banco de dados. Caso contrário, o formulário será mostrado novamente.
Crie o formulário
Agora, solicite o URL, http://localhost:8080/employee/adde insira alguns dados do funcionário e envie o formulário. Se os dados não forem fornecidos, o formulário solicitará que o usuário insira os dados conforme mostrado na captura de tela a seguir.
Se o usuário ignorar a validação do lado do cliente, o servidor validará o formulário e mostrará um erro, conforme mostrado na captura de tela a seguir.
Se os dados foram aprovados na validação do lado do cliente e do servidor, os dados do funcionário serão salvos no banco de dados e a página será redirecionada para a página de lista.