Fromidableは、フォームを処理する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 、3つの選択を生成し、データとしてDateTimeを返しますmultiradioとmulticheckbox (ソースセクションを参照)textareaselect 一部の属性は、 maxlength :のようにHTML-validではないことに注意してください。
< 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) 、このショートカットメソッドコール投稿とcheck()、およびフォームが有効な場合は$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ディレクトリでサポートされていることを確認してください。
Sourcingシステムを使用して、 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 PropertyAccesserを使用していることに注意してください。上記の例のようにアクセサを使用してプロパティを設定できることに注意してください。
使用できます:
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は必要ありません。
場合によっては、カスタムデータをフォームに追加する必要があります。これを行うには2つの方法があります。
{{ something }} Syntaxを使用すると、次のようにコードからデータを挿入できます。
<?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>次に、テンプレート変数を2番目の引数として渡すフォームを導入します。
<?php
$ form = new Gregwar Formidable Form ( ' the-above-form.php ' , array ( ' label ' => ' Your name ' )); $label PHPを使用して解釈されます。
パフォーマンスの理由から、解析されたフォームをキャッシュすることができます。
これを行うには、コンストラクターの3番目の引数として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ディレクトリに書き込まれます。
examples/ directoryでperformances.phpスクリプトを実行してみてください。これにより、キャッシュを使用したパフォーマンスゲインの例が表示されます。
GregwarCacheCacheのインスタンスを3番目のパラメーターとして渡すこともできます。これにより、Cacheディレクトリを設定できます。
GregwarFormidableはMITライセンスを取得しています。詳細については、 LICENSEファイルをご覧ください。
V2.0.0 PHP <5.6のサポートの終了
v2.1.0 Captchaライブラリへのハード依存関係を削除します