Bertelut adalah pustaka PHP untuk menangani formulir. Ini mem -parsing formulir HTML dan memungkinkan Anda memanipulasinya dari kode PHP Anda, dan kemudian membuatnya.
Via Composer:
{
"require" : {
"gregwar/formidable" : " dev-master "
}
}Atau dengan klon repositori:
git clone https://github.com/Gregwar/Formidable.gitAtau mengunduhnya:
Pertama, Anda harus menulis kode Anda di HTML, misalnya:
<!-- forms/example.html -->
< form method =" post " >
Enter your name:
< input type =" text " name =" name " /> < br />
< input type =" submit " />
</ form >Dalam kode PHP Anda, berikan formulir Anda ke tangguh:
<?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 ;Sederhana, kan?
Anda kemudian dapat menggunakan API yang tangguh untuk bermain dengan formulir Anda:
<?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 ' ;
}
});Anda juga dapat mencoba mengubah formulir Anda dan menambahkan kendala langsung dalam kode HTML:
< input type =" text " name =" name " minlength =" 10 " />Ini akan memaksa teks menjadi setidaknya 10 karakter ketika kendala sisi server akan diperiksa.
Ingin Captcha mengamankan formulir Anda?
< input type =" captcha " name =" code " />Ini akan menghasilkan gambar dan bidang input di sisi klien, dan menggunakan sesi di sisi server untuk memeriksa bahwa kode tersebut benar.
Perhatikan bahwa ini akan menggunakan ketergantungan dengan perpustakaan Gregwar/Captcha (Anda harus menginstal dependensi menggunakan Composer).
Jenis input berikut didukung:
input , dengan tipe:textnumber atau numeric , lihat atribut min dan maxint atau integer , lihat atribut min dan maxfilecheckboxradiohiddenpasswordcaptcha , akan secara otomatis menghasilkan gambardate , akan menghasilkan tiga pemilihan, dan mengembalikan DateTime sebagai datamultiradio dan multicheckbox (lihat bagian Sumber)textareaselect Perhatikan bahwa beberapa atribut tidak html-valid, seperti maxlength :
< input type =" text " name =" name " maxlength =" 10 " />Ini tidak akan diterjemahkan dalam formulir HTML, tetapi akan digunakan untuk memeriksa integritas.
Berikut adalah daftar atribut yang tersedia:
minlength : Panjang minimum nilaimaxlength : Panjang maksimum nilairegex : Regexp yang harus dihormati nilainyamin (untuk angka): Nilai minimummax (untuk angka): Nilai maksimumrequired : Katakan bahwa bidang itu diperlukanreadonly : Bidang ini hanya readyly dan tidak boleh menjadi pengubahvalue : Nilai default untuk bidangmin-entries : Tentukan jumlah minimum entri yang harus Anda berikan untuk beberapa (lihat di bawah)max-entries : Tentukan jumlah maksimum entri yang dapat Anda berikan untuk beberapa (lihat di bawah)entries : Tentukan jumlah entri minimum dan maksimum untuk beberapa (lihat di bawah) Anda dapat memanggil metode ini pada objek $form Anda:
posted() : return true jika formulir telah dipostingcheck() : Periksa formulir dan kembalikan berbagai kesalahan validitashandle($callback, $errorCallback) , panggilan metode pintasan ini diposting dan check (), dan akan menghubungi $callback jika formulirnya valid, $errorCallback lainsetAttribute($field, $attr, $value) : Menetapkan atribut tambahan di bidanggetAttribute($field, $attr) : Mendapat atribut tambahan di bidangsource($source, $values) : Feed a Source (lihat bagian "Sumber")setPlaceholder($name, $value) : Menetapkan nilai placeholder (lihat di bawah)addConstraint($field, $callback) : Menambahkan kendala khusus pada bidang, callback akan dipanggil dengan nilai bidang dan harus mengembalikan false jika tidak ada masalah, atau string kesalahan. Jika Anda hanya memberikan penutupan padanya, penutupan akan dipanggil dengan formulir yang disahkan sebagai argumen dan kemudian dapat melakukan beberapa tes yang melibatkan banyak bidang atau informasi formulir.setValue($field, $value) : Tetapkan nilai bidanggetValue($field) : Mendapat nilai bidangsetValues(array $values) : Tetapkan nilai untuk beberapa bidanggetValues() : Dapatkan nilai semua bidang Token CSRF tambahan secara otomatis dimasukkan ke dalam formulir dan diperiksa saat dikirimkan. Dengan demikian, semua formulir Anda akan diamankan.
Kehadiran dan validitas token CSRF digunakan untuk memeriksa bahwa formulir telah diposting saat menelepon metode posted (digunakan secara internal di handle )
Jika Anda menentukan atribut name dalam form , token CSRF akan berbeda untuk formulir spesifik ini, ini akan memungkinkan dapat membuat perbedaan bentuk mana yang dikirimkan jika ada beberapa bentuk pada halaman yang sama.
Bahasa untuk kesalahan dapat diatur dengan setLanguage() :
<?php
// Will set the language to french for errors
$ form -> setLanguage ( new Gregwar Formidable Language French ); Periksa apakah bahasa Anda didukung di direktori Language , jangan ragu untuk berpartisipasi!
Anda dapat menggunakan sistem sumber untuk mengisi secara dinamis select , multiradio atau multicheckbox :
< input type =" multicheckbox " name =" colours " source =" colours " /> Kemudian populasikan dengan source :
<?php
$ form -> source ( ' colours ' , array ( ' red ' , ' yellow ' , ' blue ' ));Ini akan diberikan oleh beberapa kotak centang.
Anda dapat melakukannya dengan cara ini dengan select :
< select name =" colour " >
< options source =" colours " />
< option value =" other " > Other </ option >
</ select >Dan kemudian sumbernya dengan metode yang sama
Anda dapat membuat formulir dari file atau dari string, ini akan terdeteksi secara otomatis:
<?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>
*/ Anda juga dapat menggunakan atribut mapping untuk mengisi formulir Anda atau untuk mendapatkan kembali data formulir dalam array atau di objek, misalnya:
<?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>
*/Perhatikan bahwa pemetaan menggunakan Symfony PropertyAccessor, Anda kemudian dapat menggunakan Accessor seperti pada contoh di atas untuk mengisi properti.
Anda dapat menggunakan:
getData($entity = array()) : Populasikan dan pengembalian entitas dengan data yang diisisetData($entity) : mengisi formulir dengan atribut entitas Anda dapat menambahkan beberapa sub-form ke halaman menggunakan 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 > Dengan ini, <multiple> dapat digunakan persis seperti bidang, tetapi akan berisi serangkaian elemen.
Beberapa JS akan disuntikkan di halaman dan memungkinkan Anda untuk menambahkan/menghapus beberapa elemen.
Anda dapat menggunakan batasan min-entries dan max-entries untuk menetapkan batasan jumlah entri dalam kelipatan.
Jika Anda menentukan nilai yang sama untuk min-entries dan max-entries , atau menentukan nilai untuk entries (yang sebenarnya merupakan alias untuk melakukannya), jumlah inputr akan diperbaiki dan tidak diperlukan JavaScript.
Dalam beberapa kasus, Anda ingin menambahkan data khusus ke dalam formulir, ada dua cara untuk melakukan ini.
Sintaks {{ something }} memungkinkan Anda untuk hanya menyuntikkan data dari kode, seperti ini:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
Hello {{ name }}!
</form> ' );
$ form -> setPlaceholder ( ' name ' , ' Bob ' );
echo $ form ; Dalam contoh di atas, {{ name }} akan diterjemahkan sebagai Bob .
Perhatikan bahwa placeholder dapat digunakan tetap dikecualikan dalam tag <form> dan input:
<?php
$ form = new Gregwar Formidable Form ( ' <form method="post">
<span style="color:{{ color }}">Hello</span>
</form> ' );
$ form -> setPlaceholder ( ' color ' , ' red ' );
echo $ form ;Anda juga dapat menulis formulir Anda menggunakan PHP, seperti templat, misalnya:
<form>
<?php echo $ label ; ?> : <input type="text" name="name" />
<input type="submit" />
</form>Dan kemudian instanciate formulir Anda melewati variabel template sebagai argumen kedua:
<?php
$ form = new Gregwar Formidable Form ( ' the-above-form.php ' , array ( ' label ' => ' Your name ' )); $label akan ditafsirkan menggunakan PHP.
Untuk alasan pertunjukan, Anda mungkin ingin menyimpan formulir yang diuraikan.
Untuk melakukan ini, cukup lulus true sebagai argumen ketiga dari konstruktor:
<?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 ); Ini akan menggunakan sistem Gregwar/Cache, Anda perlu mendapatkan dependensi komposer dari repositori ini atau menginstalnya secara manual. Secara default, file cache akan ditulis di direktori cache dari mana skrip dijalankan.
Cobalah untuk menjalankan skrip performances.php dalam examples/ direktori, ini akan memberi Anda contoh perolehan kinerja dengan cache.
Anda juga dapat melewati instance GregwarCacheCache sebagai parameter ketiga, yang akan memungkinkan Anda untuk mengatur direktori cache.
GregwarFormidable berada di bawah lisensi MIT, lihat file LICENSE untuk informasi lebih lanjut.
V2.0.0 Dukungan Akhir untuk PHP <5.6
V2.1.0 Hapus ketergantungan keras pada perpustakaan captcha