Formidable es una biblioteca PHP para manejar los formularios. Analiza una forma HTML y le permite manipularlo desde su código PHP, y luego renderizarlo.
Vía compositor:
{
"require" : {
"gregwar/formidable" : " dev-master "
}
}O con un clon del repositorio:
git clone https://github.com/Gregwar/Formidable.gitO descargarlo:
Primero, debe escribir su código en HTML, por ejemplo:
<!-- forms/example.html -->
< form method =" post " >
Enter your name:
< input type =" text " name =" name " /> < br />
< input type =" submit " />
</ form >En su código PHP, entregue su formulario a formidable:
<?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 ;Simple, ¿verdad?
Luego puede usar la API formidable para jugar con su formulario:
<?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 ' ;
}
});También puede intentar cambiar su formulario y agregar restricción directamente en el código HTML:
< input type =" text " name =" name " minlength =" 10 " />Esto obligará al texto a tener al menos 10 caracteres cuando se verificarán las restricciones del lado del servidor.
¿Quieres un captcha para asegurar tu formulario?
< input type =" captcha " name =" code " />Esto generará una imagen y un campo de entrada en el lado del cliente, y usará la sesión en el lado del servidor para verificar que el código sea correcto.
Tenga en cuenta que esto utilizará la dependencia con la biblioteca Gregwar/Captcha (tendrá que instalar dependencias usando el compositor).
Se admiten los siguientes tipos de entrada:
input , con tipos:textnumber o numeric , ver atributos min y maxint o integer , ver atributos min y maxfilecheckboxradiohiddenpasswordcaptcha , generará automáticamente una imagendate , generará tres selecciones y devolverá una DateTime como datosmultiradio y multicheckbox (consulte la sección fuente)textareaselect Tenga en cuenta que algunos atributos no son html-valid, como maxlength :
< input type =" text " name =" name " maxlength =" 10 " />No se representará en el formulario HTML, pero se utilizará para verificar la integridad.
Aquí está la lista de atributos disponibles:
minlength : la longitud mínima del valormaxlength : la longitud máxima del valorregex : el regexp que el valor debe respetarmin (para números): el valor mínimomax (para números): el valor máximorequired : decir que el campo es necesarioreadonly : el campo es lectura y no debe ser modificadorvalue : el valor predeterminado para el campomin-entries : especifique el número mínimo de entradas que debe proporcionar para un múltiplo (ver más abajo)max-entries : especifique el número máximo de entradas que puede proporcionar para un múltiplo (ver más abajo)entries : especifique tanto el número mínimo como el máximo de entradas para un múltiplo (ver más abajo) Puede llamar a estos métodos en su objeto $form :
posted() : return true si se publicó el formulariocheck() : Verifique el formulario y devuelva una matriz de errores de validezhandle($callback, $errorCallback) , esta llamada de método de acceso directo publicado y cheque (), y llamará a $callback si el formulario es válido, $errorCallback elsesetAttribute($field, $attr, $value) : establece un atributo adicional en un campogetAttribute($field, $attr) : obtiene un atributo adicional en un camposource($source, $values) : alimentar una fuente (consulte la sección "Fuente")setPlaceholder($name, $value) : establece un valor de marcador de posición (ver más abajo)addConstraint($field, $callback) : agrega una restricción personalizada en un campo, la callback se llamará con el valor de campo y debería devolver falso si no hay problema, o una cadena de error. Si simplemente le pasa un cierre, se llamará al cierre con el formulario aprobado como argumento y puede hacer algunas pruebas que involucran múltiples campos o información del formulario.setValue($field, $value) : establecer el valor de un campogetValue($field) : obtiene el valor de un camposetValues(array $values) : establezca los valores para algunos camposgetValues() : obtenga los valores de todos los campos Un token CSRF adicional se inserta automáticamente en el formulario y se verifica cuando se envía. Por lo tanto, todos sus formularios estarán asegurados.
La presencia y la validez del token CSRF se usa para verificar que se publique un formulario al llamar al método posted (se usa internamente en handle )
Si especifica el atributo name en el form , el token CSRF será diferente para este formulario específico, esto permitirá que formiden la diferencia de qué formulario se envía si hay un formulario múltiple en la misma página.
El idioma para los errores se puede establecer con setLanguage() :
<?php
// Will set the language to french for errors
$ form -> setLanguage ( new Gregwar Formidable Language French ); Verifique que su idioma sea compatible con el directorio de Language , ¡no dude en participar!
Puede usar el sistema de abastecimiento para completar dinámicamente una select , un multiradio o un multicheckbox :
< input type =" multicheckbox " name =" colours " source =" colours " /> Luego llévelo con source :
<?php
$ form -> source ( ' colours ' , array ( ' red ' , ' yellow ' , ' blue ' ));Esto será representado por algunas casillas de verificación.
Puede hacerlo de esta manera con select :
< select name =" colour " >
< options source =" colours " />
< option value =" other " > Other </ option >
</ select >Y luego obtenerlo con el mismo método
Puede crear formulario desde un archivo o desde una cadena, esto se detectará automáticamente:
<?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>
*/ También puede usar el atributo mapping para completar su formulario o recuperar los datos del formulario en una matriz o en un objeto, por ejemplo:
<?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>
*/Tenga en cuenta que el mapeo utiliza el Symfony PropertyAccessor, puede usar el accesorio como en el ejemplo anterior para llenar las propiedades.
Puedes usar:
getData($entity = array()) : población y devolución de entidad con datos pobladossetData($entity) : poca la forma con los atributos de la entidad Puede agregar múltiples subormes a una página usando la etiqueta <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 > Con esto, <multiple> se puede usar exactamente como un campo, pero Will contiene una variedad de elementos.
Algunos JS se inyectarán en la página y le permitirán agregar/eliminar algunos elementos.
Puede usar la restricción min-entries y max-entries para establecer límites en el número de entradas en un múltiplo.
Si especifica el mismo valor para min-entries y max-entries , o especifica un valor para entries (que en realidad es un alias para hacerlo), el número de entradas R se fijará y no se requerirá JavaScript.
En algún caso, querrá agregar datos personalizados al formulario, hay dos formas de hacerlo.
La sintaxis {{ something }} le permite simplemente inyectar datos del código, así:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
Hello {{ name }}!
</form> ' );
$ form -> setPlaceholder ( ' name ' , ' Bob ' );
echo $ form ; En el ejemplo anterior, el {{ name }} se representará como Bob .
Tenga en cuenta que los marcadores de posición se pueden usar de todos modos, excepto en las etiquetas <form> y de entrada:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
<span style="color:{{ color }}">Hello</span>
</form> ' );
$ form -> setPlaceholder ( ' color ' , ' red ' );
echo $ form ;También puede escribir su formulario usando PHP, como una plantilla, por ejemplo:
<form>
<?php echo $ label ; ?> : <input type="text" name="name" />
<input type="submit" />
</form>E instanciar su forma que pasa las variables de plantilla como segundo argumento:
<?php
$ form = new Gregwar Formidable Form ( ' the-above-form.php ' , array ( ' label ' => ' Your name ' )); La $label se interpretará usando PHP.
Por razones de actuaciones, es posible que desee almacenar en caché los formularios analizados.
Para hacer esto, simplemente pase true como el tercer argumento del constructor:
<?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 ); Esto utilizará el sistema Gregwar/Cache, deberá obtener las dependencias del compositor de este repositorio o instalarlo manualmente. Por defecto, los archivos de caché se escribirán en el directorio cache desde donde se ejecuta el script.
Intente ejecutar el script performances.php en los examples/ directorio, esto le dará un ejemplo de ganancia de rendimiento con caché.
También puede pasar una instancia de GregwarCacheCache como el tercer parámetro, que le permitirá establecer el directorio de caché.
GregwarFormidable está bajo la licencia MIT, eche un vistazo al archivo LICENSE para obtener más información.
V2.0.0 Soporte final para PHP <5.6
V2.1.0 Eliminar la dependencia dura en la biblioteca Captcha