wdForm
Version 1.0
por Wesley David Santos
Twitter: <a href="http://www.twitter.com/wesley_dav">@wesley_dav</a>
Linkedin: <a href="http://br.linkedin.com/in/wesleydavidsantos">wesleydavidsantos</a>
Solte sua imaginação
Imagine um cliente lhe pedindo para criar um formulário com o layout estilizado e que será gravado no banco de dados, sendo que possui os seguintes campos:
Nome - Tipo texto
Email - Tipo texto e validar o email
Username - Tipo texto, sem acentuação ou caracteres especiais e deve ser único no banco de dados
Gênero - Tipo radiobutton, com os valores Masculino e Feminino
Interesses - Tipo checkbox, com os valores Carro - Moto - Bike
Estado - Tipo select, com o valores Minas Gerais - São Paulo - Rio de Janeiro
Foto - Tipo file, um total de 5 fotos sendo no mÃnimo 3 obrigatórias devem estar no formato de JPG ou PNG e com o tamanho mÃnimo de 500kb e máximo de 2mb
-
E ai conseguiu soltar a imaginação? Então me responda.
* Quanto tempo você iria gastar para criar este formulário?
* Quantas linhas de código PHP, HTML e CSS você iria escrever para desenvolver este formulário?
-
E se eu te falar que com apenas 13 linhas de código PHP você conseguiria fazer isso tudo. Séria bom demais, não é? Então veja a foto abaixo e depois continue sua leitura bem entusiasmado.
<a target="_blank" href="http://goo.gl/CCDcgS"><img src="http://www.classmain.com/wdForm/layout-e-codigo-wdform.jpg" alt=""></a>
Introdução
Um breve resumo do que wdForm é:
Requisitos mÃnimos
CaracterÃsticas
-
Simples criação input
-
Funções de validação
-
Funções de formatação
-
Funções de validação via object
-
Método simples de cadastrar o formulário no banco de dados
-
Método simples de retornar um formulário preenchido com informações do banco de dados
-
Método simples de alterar informações no banco de dados
Instalação
A configuração é muito fácil e simples. Necesário somente requisitar a classe wdForm.php
Como usar
-
Você pode criar um formulário de 3 formas diferentes:
> Primeira forma de criar um formulário:
$objWdForm = new wdForm();
$objwdForm->nome = array("required", "label|Nome Completo");
$objwdForm->email = array("required", "type|email", "label|E-mail", "validate"=>array("email"));
> Segunda forma de criar um formulário:
$form = array(
"nome"=>array("required", "label|Nome Completo"),
"email"=>array("required|Informe seu e-mail", "type|email", "label|E-mail", "validate"=>array("email")),
);
$objWdForm = new wdForm( $form );
> Terceira forma de criar um formulário:
$objWdForm = new wdForm();
$objwdForm->nome_required = '';
$objwdForm->nome_label = 'Nome Completo';
$objwdForm->email_required = "Informe seu e-mail";
$objwdForm->email_type = "email";
$objwdForm->email_label = "E-mail";
$objwdForm->email_validate = array("email");
Criando os INPUTS
$objWdForm = new wdForm();
>> TEXT
- O input text é o único input que não tem a necessidade de informar o type.
Exemplo
$objWdForm->nome = array("label|Nome Completo");
OU
$objWdForm->nome = array("type|text", "label|Nome Completo");
>> PASSWORD
$objWdForm->senha = array("type|password");
>> SELECT
$objWdForm->cidade = array("type|select", "value"=>array("Belo Horizonte|bh", "São Paulo|sp", "Rio de Janeiro|rj"), "selected|bh");
OU
$objWdForm->cidade = array("type|select", "value"=>array("Belo Horizonte", "São Paulo", "Rio de Janeiro"), "selected|Belo Horizonte");
OU
$objWdForm->cidade = array("type|select", "value"=>mountArrayWdForm( Cidades::all() )); // Objeto retornado com registros do banco de dados
OU
$objWdForm->cidade = array("type|select", "value"=>mountArrayWdForm( array("Belo Horizonte", "São Paulo", "Rio de Janeiro"), "array" )); // Array contendo as informações
>> RADIO
$objWdForm->genero = array("type|radio", "value"=>array("Masculino|m", "Feminino|f"), "checked|m");
OU
$objWdForm->genero = array("type|radio", "value"=>array("Masculino", "Feminino"), "checked|Masculino");
> Também pode ser utilizado o mountArrayWdForm()
>> CHECKBOX
$objWdForm->interesses = array("type|checkbox", "value"=>array("Carro|carro", "Moto|moto", "Bike|bike"), "checked|bike");
OU
$objWdForm->interesses = array("type|checkbox", "value"=>array("Carro", "Mototo", "Bike"), "checked|Bike");
> Também pode ser utilizado o mountArrayWdForm()
>> TEXTAREA
$objWdForm->descricao = array("type|textarea");
>> FILE
$objWdForm->foto = array("type|file", "count|5", "countrequired|3");
Atributos especiais
- Você pode criar atributos em que o seu valor pertence a um outro atributo ou a um outro input
Exemplo
> Atribuição simples de valor
$objWdForm = new wdForm();
$objwdForm->senha = array("required", "label|Senha pessoal", "id|%name"); // O 'id' irá possuir o valor do atributo 'name' que é 'senha'
OU
$objwdForm->senha = array("required", "label|Senha pessoal", "id|%label"); // O 'id' irá possuir o valor do atributo 'label' que é 'Senha pessoal'
> Atribuição complexa de valor
$objWdForm = new wdForm();
$objWdForm->nome = array("label|Nome Completo", "id|%label");
$objWdForm->itens = array("label|Valor produto", "id|produto");
$objWdForm->qtd = array("label|Quantidade de itens", "id|qtd", "onkeyup|soma('%itens_id%', '%id%');");
$objWdForm->total = array("label|Total", "id|total");
> Explicação
- O primeiro parâmetro da function 'soma' recebe o valor do 'id' do input 'itens'.
- O segundo parâmetro da function 'soma' recebe o valor do 'id' do próprio input.
> Observação - O atributo que você esta buscando deve ser criado antes da atribuição a outro atributo
Gerando o formulário
echo $objwdForm->createForm();
OU
echo $objwdForm->createForm('Basic.xml'); // Passar como parâmetro o XML do layout
OU
echo $objwdForm->nome_input; // Recebe o INPUT pronto para ser usado onde desejar
echo $objwdForm->email_input; // Recebe o INPUT pronto para ser usado onde desejar
Validar o SUBMIT
// Verifica se o SUBMIT foi requisitado
if( $objwdForm->checkSubmit() ){
// Realiza ações
}
Retornar valores do formulário
- Você pode requisitar o valor de qualquer atributo de um input do formulário, basta informa o nome do input e o nome do atributo que deseja
Exemplo
- echo $objwdForm->nome_label; // Nome Completo
- echo $objwdForm->nome; // Retorna o valor informado pelo usuário
Retornar valores de Inputs especiais SELECT - RADIO - CHECKBOX - FILE
- echo $objwdForm->cidade_selected; // INPUT SELECT
- echo $objwdForm->interesses_checked; // INPUT RADIO ou CHECKBOX
- echo $objwdForm->foto_listfiles; // INPUT FILE - Retorna o nome dos arquivos, somente após realizado o UPLOAD
Gravar formulário no Banco de Dados
- Para gravar um formulário no banco de dados é simples, mas você precisa ter uma classe MODEL
Exemplo
## INSERT ##
$objWdForm = new wdForm();
$objWdForm->db->setModel('dbUser');
$objwdForm->nome = array("required", "label|Nome Completo");
$objwdForm->email = array("required", "type|email", "label|E-mail", "validate"=>array("email"));
// Verifica se o SUBMIT foi requisitado
if( $objwdForm->checkSubmit() ){
# Grava os dados no banco de dados
if( $objwdForm->db->insert() ){
// Sucesso
}else{
// Erro
}
}
## UPDATE ##
$objWdForm = new wdForm();
$objWdForm->db->setModel('dbUser');
$objwdForm->nome = array("required", "label|Nome Completo");
$objwdForm->email = array("required", "type|email", "label|E-mail", "validate"=>array("email"));
// Verifica se o SUBMIT foi requisitado
if( $objwdForm->checkSubmit() ){
# Grava os dados no banco de dados
if( $objwdForm->db->update( 1 ) ){ // 1 == ID do registro
// Sucesso
}else{
// Erro
}
}else{
// Preenche o formulário com as informações vindas do banco de dados
$objwdForm->db->populateForm( 1 ); // 1 == ID do registro
}
## Pegar o objeto usado pelo INSERT ou UPDATE ##
$objDB = $objwdForm->db->getObj();
Upload de arquivos
- Você pode realizar o upload de quantos arquivos desejar
Exemplo
$objWdForm = new wdForm();
$objwdForm->foto = array("type|file", "label|Cadastre suas fotos", "count|5", "countrequired|3", "maxsize|10mb", "minsize|500kb");
$objwdForm->anexo = array("type|file", "label|Cadastre os anexos", "count|3", 'type_valid'=>array('file/pdf'));
// Verifica se o SUBMIT foi requisitado
if( $objwdForm->checkSubmit() ){
// Retorna um array contendo as informações dos arquivos
$upload = $objwdForm->uploadFiles();
foreach( $upload['foto'] as $foto ){
echo $foto->getName(); // Nome do arquivo
var_dump( $foto->getAllInf() ); // Informações do UPLOAD
}
foreach( $upload['anexo'] as $foto ){
echo $foto->getName(); // Nome do arquivo
var_dump( $foto->getAllInf() ); // Informações do UPLOAD
}
}
Funções de validação
- Você pode validar um campo de varias formas e pode existir varias formas de validação em um único INPUT
>> UNIQUE <<
- Usado em formulário que irão inserir ao alterar informações do banco de dados.
- Quando for realizado a requisição de INSERT ou UPDATE será verificado se o valor já existe cadastrado no banco de dados
Exemplo
$objWdForm = new wdForm();
$objWdForm->cpf = array("label|CPF", "unique");
>> Validate <<
- Usa uma function para validar o valor informado.
- Você pode criar novas functions, basta abrir o arquivo 'validate.php' dentro do diretório 'helpers'
- Você pode adicionar quantas validações precisar.
$objWdForm = new wdForm();
$objWdForm->cpf = array("label|CPF", "validate"=>array("cpf")); // Em caso de erro retorna a mensagem de padrão
OU
$objWdForm->cpf = array("label|CPF", "validate"=>array("cpf"=>"Informe um cpf válido")); // Em caso de erro retorna a mensagem personalizada
>> Object <<
- Usa uma objeto qualquer para validar o valor informado.
- A açõa realizada deve retornar um valor boolean
- Você pode adicionar quantas validações precisar.
$objWdForm = new wdForm();
$objWdForm->cidade = array("label|CPF", "object"=>array("Cidade->verificaCidade", "Estado::verificaEstado")); // Em caso de erro retorna a mensagem de padrão
OU
$objWdForm->cidade = array("label|CPF", "object"=>array("Cidade->verificaCidade"=>"Cidade não existe", "Estado::verificaEstado"=>"Cidade não pertence ao estado")); // Em caso de erro retorna mensagem personalizada
Observações
O input FILE possui algumas funções interessantes, que são:
> count - cria um array de input file possibilitando assim o upload de vários arquivos com apenas um INPUT
> countrequired - quantidade mÃnima de arquivos que devem ser anexados
> maxsize - tamanho máximo de cada arquivo
> minsize - tamanho mÃnimo de cada arquivo
> type_valid - ARRAY informa os tipos válidos para upload
>> Todos essas ações existem de forma default e podem ser configuradas dentro do arquivo config.php
Funções de formatação
- Você pode formatar um campo de varias formas e pode existir varias formas de formatação em um único INPUT
Exemplo
$objWdForm = new wdForm();
$objWdForm->username = array("label|Nome de Usuário", "format"=>array("removeCharSpecial", "removeHTML")); // Retorna os valores formatados
Limpar valores do formulário
- Você pode limpar os valores do formulário de 2 formas
> clearAllValues();
- Limpa os valores de todos os campos
> clearValue( 'nome', 'email', 'senha' );
- Limpa o valor dos inputs informados via parâmetro
Excluir um INPUT
- Para excluir um input é só informar como parâmetro o nome do INPUT
Exemplo
unsetInput( 'nome', 'email' );
- Você pode passar quantos parâmetros desejar
Verificar erros submit
- Você pode verificar se o formulário gerou erro atráves do método
$objWdForm->existErro(); // Retorna um boolean
- Existem várias formas de recuperação dos erros gerados.
> Primeira forma
- Você pode buscar o erro de cada INPUT
Exemplo
var_dump( $objWdForm->nome_erro ); // Retorna um objeto do tipo MsgErro
> Segunda forma
- Erros gerados pelos INPUTS
Exemplo
$objWdForm->getErrosInput(); // Retorna uma lista 'ul'
> Terceira forma
- Erros gerados pelas requisições ao banco de dados
Exemplo
$objWdForm->getErrosDml(); // Retorna uma lista 'ul',
> Quarta forma
- Retorna todos os erros juntos. INPUTS e Requisições ao banco de dados
Exemplo
$objWdForm->getAllErros(); // Retorna uma lista 'ul'
Modelos de Formulário
- Você pode criar vários modelos de layout de formulário e utiliza-los em qualquer instância do wdForm
- Os modelos de layout estão armazenados dentro do dirétorio 'models-form'
Framework do banco de dados
- Os arquivos DML estão localizados dentro do diretório 'lib_dml'.
- No momento existe apenas o framework PhpActiveRecord, você pode adicionar novos frameworks de forma simples, basta usar o atual como modelo.
- PhpActiveRecord - http://www.phpactiverecord.org/
Observações Importantes
- O nome dos INPUTS não podem ser criados usando o underline
> Modo correto
- $objwdForm->nome = array("required", "label|Nome Completo");
> Modo errado
- $objwdForm->nome_usuario = array("required", "label|Nome Completo");
VÃdeos de demostração
<a href="http://youtu.be/GSt_3FoLBq4">wdForm - Introdução</a> <br /><br />
<a href="http://youtu.be/RxI-kGYly1E">wdForm - Criando os primeiros inputs</a> <br /><br />
<a href="http://youtu.be/hOqf7RrZ0_E">wdForm - Cadastrar formulário no banco de dados</a> <br /><br />
<a href="http://youtu.be/QPaVmbGWMLw">wdForm - Preencher e update no banco de dados</a> <br /><br />
<a href="">wdForm - Detalhando a estrutura do framework</a> <br /><br />
Se você gostou e quer dar uma força doações são bem vindas ;)
<a href="http://goo.gl/pkpekP"><img src="http://www.classmain.com/wdForm/doar-paypal.jpg" alt=""></a><br /><br />
<a href="http://goo.gl/BzLLo2"><img src="http://www.classmain.com/wdForm/doar-pagseguro.gif" alt=""></a><br /><br />
<a href='https://pledgie.com/campaigns/27586'><img alt='Click here to lend your support to: wdForm - php and make a donation at pledgie.com !' src='https://pledgie.com/campaigns/27586.png?skin_name=chrome' border='0' ></a> <br /><br />