強大的是一個可以處理表單的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庫的依賴關係(您必須使用Composer安裝依賴項)。
支持以下輸入類型:
input標籤,具有類型:textnumber或numeric ,請參閱min和max屬性int或integer ,請參閱min和max屬性filecheckboxradiohiddenpasswordcaptcha ,將自動生成圖像date ,將生成三個選擇,並將DateTime作為數據返回multiradio和multicheckbox (請參閱源部分)textareaselect 請注意,某些屬性不是html-valid,例如maxlength :
< input type =" text " name =" name " maxlength =" 10 " />它不會以HTML形式渲染,但將用於檢查完整性。
這是可用屬性的列表:
minlength :值的最小長度maxlength :值的最大長度regex :值應尊重的正則min (數字):最小值max (數字):最大值required :說明該字段是必需的readonly :該字段已閱讀,不應是修飾符value :該字段的默認值min-entries :指定您應該提供多個的最小條目數(請參見下文)max-entries :指定您可以提供多個的最大條目數(請參見下文)entries :指定多個倍數的最小條目和最大條目數(見下文) 您可以在$form對像上調用這些方法:
posted() :返回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內部使用)
如果您在form中指定name屬性,則該特定表單的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的值(實際上是這樣做的別名),則將osr輸入的數量固定,不需要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目錄中。
嘗試在examples/目錄中運行performances.php腳本,這將為您提供緩存性能增益的示例。
您還可以將GregwarCacheCache的實例作為第三個參數,該參數將允許您設置高速緩存目錄。
GregwarFormidable屬於MIT許可,請查看LICENSE文件以獲取更多信息。
v2.0.0最終支持PHP <5.6
v2.1.0刪除驗證庫庫的硬依賴