O formidável é uma biblioteca PHP para lidar com formas. Ele analisa um formulário HTML e permite manipulá -lo do seu código PHP e depois renderizá -lo.
Via compositor:
{
"require" : {
"gregwar/formidable" : " dev-master "
}
}Ou com um clone do repositório:
git clone https://github.com/Gregwar/Formidable.gitOu baixando:
Primeiro, você deve escrever seu código no HTML, por exemplo:
<!-- forms/example.html -->
< form method =" post " >
Enter your name:
< input type =" text " name =" name " /> < br />
< input type =" submit " />
</ form >No seu código PHP, forneça seu formulário para formidável:
<?php
session_start ();
include ( ' vendor/autoload.php ' );
// Formidable will parse the form and use it to check integrity
// on the server-side
$ form = new Gregwar Formidable Form ( ' forms/example.html ' );
$ form -> handle ( function () {
echo " Form OK! " ;
}, function ( $ errors ) {
echo " Errors: <br/> " ;
foreach ( $ errors as $ error ) {
echo " $ error <br /> " ;
}
});
echo $ form ;Simples, certo?
Você pode usar a API formidável para brincar com seu formulário:
<?php
// Will set the value of the field
$ form -> name = " Bob " ;
// Will get the value of the field
$ name = $ form -> name ;
// Adds a constraint on the name
$ form -> addConstraint ( ' name ' , function ( $ value ) {
if ( strlen ( $ value ) < 10 ) {
return ' Your name should be at least 10 characters! ' ;
}
});
// Adds a constraint on the whole form
$ form -> addConstraint ( function ( $ form ) {
if ( $ form -> getValue ( ' pass1 ' ) != $ form -> getValue ( ' pass2 ' )) {
return ' The passwords are different ' ;
}
});Você também pode tentar alterar seu formulário e adicionar restrição diretamente no código HTML:
< input type =" text " name =" name " minlength =" 10 " />Isso forçará o texto a ter pelo menos 10 caracteres quando as restrições do lado do servidor serão verificadas.
Quer um Captcha para proteger seu formulário?
< input type =" captcha " name =" code " />Isso gerará uma imagem e um campo de entrada no lado do cliente e usará a sessão no lado do servidor para verificar se o código está correto.
Observe que isso usará a dependência na biblioteca Gregwar/Captcha (você precisará instalar dependências usando o Composer).
Os seguintes tipos de entrada são suportados:
input , com tipos:textnumber ou numeric , consulte atributos min e maxint ou integer , veja atributos min e maxfilecheckboxradiohiddenpasswordcaptcha , irá gerar automaticamente uma imagemdate , gerará três seleções e retornará um DateTime como dadosmultiradio e multicheckbox (consulte a seção de origem)textareaselect Observe que alguns atributos não são válidos em html, como maxlength :
< input type =" text " name =" name " maxlength =" 10 " />Não será renderizado no formulário HTML, mas será usado para verificar a integridade.
Aqui está a lista de atributos disponíveis:
minlength : o comprimento mínimo do valormaxlength : o comprimento máximo do valorregex : o regexp que o valor deve respeitarmin (para números): o valor mínimomax (para números): o valor máximorequired : diga que o campo é necessárioreadonly : O campo é reado e não deve ser modificadorvalue : o valor padrão para o campomin-entries : Especifique o número mínimo de entradas que você deve fornecer para um múltiplo (veja abaixo)max-entries : Especifique o número máximo de entradas que você pode fornecer para um múltiplo (veja abaixo)entries : especifique o número mínimo e máximo de entradas para um múltiplo (veja abaixo) Você pode chamar esse método no seu objeto $form :
posted() : Retorne true se o formulário foi publicadocheck() : verifique o formulário e retorne uma variedade de erros de validadehandle($callback, $errorCallback) , esta chamada do método de atalho postada e check () e ligará para $callback se o formulário for válido, $errorCallback maissetAttribute($field, $attr, $value) : Define um atributo extra em um campogetAttribute($field, $attr) : recebe um atributo extra em um camposource($source, $values) : Feed uma fonte (consulte a seção "Fonte")setPlaceholder($name, $value) : define um valor de espaço reservado (veja abaixo)addConstraint($field, $callback) : Adiciona uma restrição personalizada em um campo, o callback será chamado com o valor do campo e deve retornar false se não houver problema ou uma string de erro. Se você apenas passar um fechamento, o fechamento será chamado com o formulário passado como argumento e poderá fazer alguns testes envolvendo vários campos ou formar informações.setValue($field, $value) : Defina o valor de um campogetValue($field) : obtém o valor de um camposetValues(array $values) : Defina os valores para alguns camposgetValues() : obtenha os valores de todos os campos Um token CSRF adicional é inserido automaticamente no formulário e verificado quando for enviado. Assim, todos os seus formulários serão garantidos.
A presença e a validade do token CSRF é usada para verificar se um formulário foi publicado ao ligar para o método posted (é usado internamente na handle )
Se você especificar o atributo name no form , o token CSRF será diferente para esse formulário específico, isso permitirá que o formidável faça a diferença de qual formulário for enviado se houver um formulário múltiplo na mesma página.
O idioma para os erros pode ser definido com setLanguage() :
<?php
// Will set the language to french for errors
$ form -> setLanguage ( new Gregwar Formidable Language French ); Verifique se seu idioma é suportado no diretório de Language , não hesite em participar!
Você pode usar o sistema de fornecimento para preencher dinamicamente uma select , um multiradio ou um multicheckbox :
< input type =" multicheckbox " name =" colours " source =" colours " /> Em seguida, preencha -o com source :
<?php
$ form -> source ( ' colours ' , array ( ' red ' , ' yellow ' , ' blue ' ));Isso será renderizado por algumas caixas de seleção.
Você pode fazer desta maneira com select :
< select name =" colour " >
< options source =" colours " />
< option value =" other " > Other </ option >
</ select >E depois obtenha -o com o mesmo método
Você pode criar formulário a partir de um arquivo ou de uma string, isso será detectado automaticamente:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
<select name="colour">
<option value="blue">Blue</option>
<option selected value="red">Red</option>
<option value="green">Green</option>
</select>
</form> ' );
echo $ form -> getValue ( ' colour ' ) . "n" ;
// red
// Sets the color to blue
$ form -> setValue ( ' colour ' , ' blue ' );
echo $ form ;
/* Will display:
<form method="post">
<select name="colour" >
<option selected="selected" value="blue">Blue</option>
<option value="red">Red</option>
<option value="green">Green</option>
</select>
<input type="hidden" name="posted_token" value="d293dc38017381b6086ff1a856c1e8fe43738c60" />
</form>
*/ Você também pode usar o atributo mapping para preencher seu formulário ou recuperar os dados do formulário em uma matriz ou em um objeto, por exemplo:
<?php
class Person
{
protected $ name ;
public function getName () { return $ this -> name ; }
public function setName ( $ name ) {
$ this -> name = $ name ;
}
}
$ person = new Person ;
$ person -> setName ( ' Jack ' );
$ form = new Gregwar Formidable Form ( ' <form method="post">
<input type="text" name="name" mapping="name" />
</form> ' );
$ form -> setData ( $ person );
echo $ form ;
/*
Will output something like:
<form method="post">
<input required="required" type="text" name="name" value="Jack" />
<input type="hidden" name="posted_token" value="aa27f437cc6127c244db14361fd614af51c79aac" />
</form>
*/Observe que o mapeamento usa o Symfony PropertyAccessor, você pode usar o acessador como no exemplo acima para preencher as propriedades.
Você pode usar:
getData($entity = array()) : preencher e devolver a entidade com dados preenchidossetData($entity) : preencha o formulário com os atributos da entidade Você pode adicionar vários submums a uma página usando a tag <multiple> :
< form method =" post " >
Film name: < input type =" text " name =" film_name " mapping =" name " />
< h2 > Actors </ h2 >
< multiple name =" actors " mapping =" actors " >
First name: < input name =" first_name " mapping =" firstName " /> < br />
Last name: < input name =" last_name " mapping =" lastName " /> < br />
</ multiple >
< input type =" submit " />
</ form > Com isso, o <multiple> pode ser usado exatamente como um campo, mas contém uma variedade de elementos.
Alguns JS serão injetados na página e permitem que você adicione/remova alguns elementos.
Você pode usar restrições de min-entries e max-entries para definir limites para o número de entradas em um múltiplo.
Se você especificar o mesmo valor para min-entries e max-entries ou especificar um valor para entries (que na verdade é um alias para fazê-lo), o número de entradas der será corrigido e nenhum JavaScript será necessário.
Em alguns casos, você deseja adicionar dados personalizados ao formulário, há duas maneiras de fazer isso.
A sintaxe {{ something }} permite que você simplesmente injete dados do código, como este:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
Hello {{ name }}!
</form> ' );
$ form -> setPlaceholder ( ' name ' , ' Bob ' );
echo $ form ; No exemplo acima, o {{ name }} será renderizado como Bob .
Observe que os espaços reservados podem ser usados de qualquer maneira, exceto nas tags <form> e de entrada:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
<span style="color:{{ color }}">Hello</span>
</form> ' );
$ form -> setPlaceholder ( ' color ' , ' red ' );
echo $ form ;Você também pode escrever seu formulário usando PHP, como um modelo, por exemplo:
<form>
<?php echo $ label ; ?> : <input type="text" name="name" />
<input type="submit" />
</form>E depois instancie seu formulário que passa as variáveis do modelo como um segundo argumento:
<?php
$ form = new Gregwar Formidable Form ( ' the-above-form.php ' , array ( ' label ' => ' Your name ' )); O $label será interpretado usando PHP.
Por razões de performances, você pode cache os formulários analisados.
Para fazer isso, basta passar true como o terceiro argumento do construtor:
<?php
/**
* Parsed data for the form will be serialized and stored in a cache file,
* if you use this form often, this will offer you better performances.
*/
$ form = new Gregwar Formidable Form ( ' form.html ' , null , true ); Isso usará o sistema Gregwar/Cache, você precisará obter as dependências do compositor deste repositório ou instalá -lo manualmente. Por padrão, os arquivos de cache serão escritos no diretório cache de onde o script é executado.
Tente executar o script do performances.php examples/
Você também pode passar em uma instância de GregwarCacheCache como o terceiro parâmetro, que permitirá que você defina o diretório do cache.
GregwarFormidable está sob licença do MIT, dê uma olhada no arquivo LICENSE para obter mais informações.
V2.0.0 Suporte final para PHP <5,6
V2.1.0 Remova a dependência difícil da biblioteca CAPTCHA