4. Formulários
Nós implementamos uma forma bem simples e produtiva de criar formulários, uma vez que um projeto normalmente dispõe de muitos formulários e isto acaba nos fazendo perder bastante tempo programando cada um deles.
A proposta do SuitUp não é monopolizar seu formulário e tomar conta dele, isso faz com que você perca o controle sobre alguns pontos e acaba gerando muitas dificuldades de alterações e personalizações. Nós queremos facilitar sua vida por isso automatizamos a parte chata e deixamos para você o HTML totalmente livre para ser alterado.
Criar
Vamos começar montando o HTML do formulário.
Arquivo: ModuleDefault/views/index/index.phtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | <form action="" method="post">
<div class="input-group">
<span class="input-group-addon">Nome *:</span>
<input type="text" name="name" class="form-control" value="<?php echo isset($data['name']) ? $data['name'] : '' ;?>" />
</div>
<?php if (isset($form->messages['name'])): ?>
<span class="text-danger"><?php echo implode("<br/>", $form->messages['name']); ?></span>
<?php endif; ?>
<br/>
<div class="input-group">
<span class="input-group-addon">E-mail:</span>
<input type="text" name="email" class="form-control" value="<?php echo isset($data['email']) ? $data['email'] : '' ;?>" />
</div>
<?php if (isset($form->messages['email'])): ?>
<span class="text-danger"><?php echo implode("<br/>", $form->messages['email']); ?></span>
<?php endif; ?>
<br/>
<button type="submit" class="btn btn-success pull-right">
<i class="fa fa-save"></i> Salvar
</button>
</form>
|
Validação
Agora vamos a classe que irá fazer a validação e filtros do formulário. Você se lembra que comentamos la na [[1. Instalação]] que a estrutura de Form
era opcional? Pois é, você pode colocar as classes de formulários onde quiser, mas nós recomendamos que sejam organizados os formulários segundo a estrutura de views
No arquivo abaixo, por exemplo, este formulário aparecerá na mesma view que segue sua estrutura, ou seja, ModuleDefault/views/index/index.phtml
. Desse modo somente de olhar para uma view você sabe exatamente onde estará a classe do formulário.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 | <?php
// File: ModuleDefault/Form/Index/Index.php
namespace ModuleDefault\Form\Index;
use SuitUp\FormValidator\AbstractFormValidator;
class Index extends AbstractFormValidator
{
/**
* Tudo que você tem que fazer é indicar aqui como
* quer que seu formulário seja validado e filtrado.
*
* Note que você pode criar métodos para validação
* a sua maneira como o metodo randomTrueFalse()
*
* O indice 'name' e 'email' são os nomes do campos no HTML.
*
* @var array
*/
protected $data = array(
'name' => array('validation' => array('notEmpty', 'randomTrueFalse'), 'filter' => array('trim')),
// Exempo com validação do Zend
'email' => array(
'validation' => array(
'\Zend\Validator\EmailAddress' => array(
'messages' => array(
\Zend\Validator\EmailAddress::INVALID => "Endereço de e-mail inválido",
\Zend\Validator\EmailAddress::INVALID_FORMAT => "Endereço de e-mail inválido",
\Zend\Validator\EmailAddress::INVALID_HOSTNAME => "Endereço de e-mail inválido",
)
),
),
'filter' => array('trim'),
)
);
/**
* Exemplo de metodo para validacao, crie quantos quiser.
*
* @param type $value
* @return \stdClass
*/
public function randomTrueFalse($value)
{
$result = new \stdClass();
$result->error = false;
$result->message = "";
if ((mctime()%2) == 0) {
$result->error = true;
$result->message = "Randomicamente eu quero que dê erro";
}
return $result;
}
}
|
Note que a validação de e-mail foi feita utilizando as validações do Zend Framework. Se você abrir o arquivo composer.json do SuitUp vai notar que os projetos do Zend para validações já estão inclusas. O Zend é um framework grande, muito bem testado com uma garantia de funcionalidade incrível, por isso nós aproveitamos para incluí-lo. Nós temos também diversos métodos que nós mesmos desenvolvemos para validações e filtros corriqueiros. Acompanhe a lista abaixo.
No controlador
Depois disso basta adequar o controlador para utilizar esta validação. Você só precisa instanciar a classe do formulário, verificar se houve post e se o formulário é válido.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | namespace ModuleDefault\Controllers;
use Braghim\Enum\MsgType;
class IndexController extends AbstractController
{
public function indexAction()
{
// Note que nos preferimos colocar o formulário a exemplo do caminho na URL
// Assim fica mais fácil achar ele para dar manutenção.
$form = new \ModuleDefault\Form\Index\Index();
$data = array();
// Houve post?
if ($this->isPost()) {
// Formulário é válido?
if ($form->isValid()) {
// Sim, aqui você prossegue com sua logica...
$data = $form->getData();
dump($data);
} else {
// Erro de formulário, adiciona mensagem geral e alimenta data para
// preencher novamente os campos.
$this->addMsg("Verifique os erros no formulário", MsgType::DANGER);
$data = $form->getData();
}
}
// Envia dados para view.
return $this->addViewVar(array(
'form' => $form,
'data' => $data,
));
}
}
|