Компания PHP -библиотека для обработки форм. Он анализирует форму HTML и позволяет вам манипулировать ее из вашего PHP -кода, а затем отображать.
Через композитор:
{
"require" : {
"gregwar/formidable" : " dev-master "
}
}Или с клоном репозитория:
git clone https://github.com/Gregwar/Formidable.gitИли загружать его:
Во -первых, вы должны написать свой код в HTML, например:
<!-- forms/example.html -->
< form method =" post " >
Enter your name:
< input type =" text " name =" name " /> < br />
< input type =" submit " />
</ form >В вашем PHP -коде дайте свою форму на грозное:
<?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 ;Просто, верно?
Затем вы можете использовать грозный API, чтобы играть со своей формой:
<?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 ' ;
}
});Вы также можете попытаться изменить свою форму и добавить ограничение непосредственно в код HTML:
< input type =" text " name =" name " minlength =" 10 " />Это заставит текст длиной не менее 10 символов, когда будут проверены ограничения на стороне сервера.
Хотите, чтобы капча обеспечила вашу форму?
< input type =" captcha " name =" code " />Это будет генерировать изображение и поле ввода на стороне клиента и использовать сеанс на стороне сервера, чтобы проверить, что код верен.
Обратите внимание, что это будет использовать зависимость с библиотекой Gregwar/Captcha (вам придется установить зависимости с помощью композитора).
Поддерживаются следующие типы вводов:
input теги, с типами:textnumber или numeric , см. Атрибуты min и maxint или integer , см. Атрибуты min и maxfilecheckboxradiohiddenpasswordcaptcha , автоматически генерирует изображениеdate , будет генерировать три выбора и вернуть DateTime в качестве данныхmultiradio и multicheckbox (см. Раздел Source)textareaselect Обратите внимание, что некоторые атрибуты не являются html-valid, как maxlength :
< input type =" text " name =" name " maxlength =" 10 " />Он не будет отображаться в форме HTML, но будет использоваться для проверки честности.
Вот список доступных атрибутов:
minlength : минимальная длина значенияmaxlength : максимальная длина значенияregex : regexp, что значение должно уважатьmin (для чисел): минимальное значениеmax (для чисел): максимальное значениеrequired : Скажите, что поле требуетсяreadonly : поле читается и не должно быть модификаторомvalue : значение по умолчанию для поляmin-entries : укажите минимальное количество записей, которые вы должны предоставить для нескольких (см. Ниже)max-entries : укажите максимальное количество записей, которые вы можете предоставить для нескольких (см. Ниже)entries : укажите как минимальное, так и максимальное количество записей для нескольких (см. Ниже) Вы можете вызвать этот метод на объекте $form :
posted() : return true, если форма была опубликованаcheck() : проверьте форму и верните массив ошибок достоверностиhandle($callback, $errorCallback) , этот вызов метода ярлыков, разместил и проверяет () и позвонит в $callback , если форма действительна, $errorCallback elsesetAttribute($field, $attr, $value) : устанавливает дополнительный атрибут в полеgetAttribute($field, $attr) : получает дополнительный атрибут в полеsource($source, $values) : подайте источник (см. Раздел «Источник»)setPlaceholder($name, $value) : устанавливает стоимость заполнителя (см. Ниже)addConstraint($field, $callback) : добавляет пользовательское ограничение в поле, callback будет вызван со значением поля и должен вернуть False, если нет проблем, или строку ошибки. Если вы просто передаете его закрытие, закрытие будет вызвано с помощью формы, принятой в качестве аргумента, и может сделать некоторые тесты, включающие несколько полей или информацию о форме.setValue($field, $value) : установите значение поляgetValue($field) : получает стоимость поляsetValues(array $values) : установите значения для некоторых полейgetValues() : Получите значения всех полей Дополнительный токен CSRF автоматически вставлен в форму и проверяется при его отправке. Таким образом, все ваши формы будут защищены.
Наличие и обоснованность токена CSRF используются для проверки, что форма была опубликована при posted (она используется внутренне в handle )
Если вы указали атрибут name в form , токен CSRF будет отличаться для этой конкретной формы, это позволит грозном, чтобы изменить, какую форму отправляется, если на одной странице есть несколько форм.
Язык для ошибок может быть установлен с помощью setLanguage() :
<?php
// Will set the language to french for errors
$ form -> setLanguage ( new Gregwar Formidable Language French ); Убедитесь, что ваш язык поддерживается в Language каталоге, не стесняйтесь участвовать!
Вы можете использовать систему источников для динамического заполнения select , multiradio или multicheckbox .
< input type =" multicheckbox " name =" colours " source =" colours " /> Затем заполняйте его source :
<?php
$ form -> source ( ' colours ' , array ( ' red ' , ' yellow ' , ' blue ' ));Это будет отображаться некоторыми флажками.
Вы можете сделать это таким образом с select :
< select name =" colour " >
< options source =" colours " />
< option value =" other " > Other </ option >
</ select >А затем поставьте его с тем же методом
Вы можете создать форму из файла или из строки, это будет обнаружено автоматически:
<?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>
*/ Вы также можете использовать атрибут mapping для заполнения вашей формы или для того, чтобы вернуть данные формы в массиве или в объекте, например:
<?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>
*/Обратите внимание, что отображение использует Symfony PropertyAccessor, вы можете использовать аксессуар, как в примере выше для заполнения свойств.
Вы можете использовать:
getData($entity = array()) : заполнить и вернуть сущность с заполненными даннымиsetData($entity) : заполнить форму атрибутами сущности Вы можете добавить несколько подраздел на странице, используя тег <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 > При этом <multiple> можно использовать точно так же, как поле, но в нем будет множество элементов.
Некоторые JS будет вводит на странице и позволит вам добавить/удалить некоторые элементы.
Вы можете использовать ограничения min-entries и max-entries чтобы установить ограничения на количество записей в нескольких.
Если вы указываете то же значение для min-entries и max-entries , или указаете значение для entries (которое на самом деле является псевдонимом для этого), количество входов OFR будет исправлено, и JavaScript не потребуется.
В некотором случае, вы захотите добавить пользовательские данные в форму, есть два способа сделать это.
{{ something }} синтаксис позволяет просто вводить данные из кода, например:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
Hello {{ name }}!
</form> ' );
$ form -> setPlaceholder ( ' name ' , ' Bob ' );
echo $ form ; В приведенном выше примере {{ name }} будет отображаться как Bob .
Обратите внимание, что заполнители могут быть использованы в любом случае, за исключением <form> и входных тегов:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
<span style="color:{{ color }}">Hello</span>
</form> ' );
$ form -> setPlaceholder ( ' color ' , ' red ' );
echo $ form ;Вы также можете написать свою форму, используя PHP, например, шаблон, например:
<form>
<?php echo $ label ; ?> : <input type="text" name="name" />
<input type="submit" />
</form>А затем информируйте вашу форму, передавая переменные шаблона как второй аргумент:
<?php
$ form = new Gregwar Formidable Form ( ' the-above-form.php ' , array ( ' label ' => ' Your name ' )); $label будет интерпретироваться с использованием PHP.
По причинам выступлений вы можете захотеть кэшировать проанализированные формы.
Чтобы сделать это, просто передайте true как третий аргумент конструктора:
<?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 ); Это будет использовать систему Gregwar/Cache, вам нужно будет получить зависимости от композитора этого хранилища или установить ее вручную. По умолчанию файлы кэша будут написаны в каталоге cache , откуда запускается сценарий.
Попробуйте запустить сценарий performances.php в examples/ каталоге, это даст вам пример прироста производительности с помощью кеша.
Вы также можете передать экземпляр GregwarCacheCache в качестве третьего параметра, который позволит вам установить каталог кэша.
GregwarFormidable находится под лицензией MIT, посмотрите на файл LICENSE для получения дополнительной информации.
V2.0.0 Конечная поддержка PHP <5,6
V2.1.0 Удалите жесткую зависимость от библиотеки CAPTCHA