Form Kütüphanesi
"Başlangıç dosya ve kontrolcüleri üzerinden tüm kontrolcü ve görünümlere veri gönderilebilir."
Form nesnelerini sınıf formuna getirerek gerek görünüm gerekse de kontrolcü içerisinde kullandırmayı amaçlar. Nesne zincirlemesi ile istenilen özellik değer çiftleri kolaylıkla eklenebilmektedir. Özellikle veritabanı ile doğrudan ilişkili çalışabilir olması standart form kullanımına göre büyük kolaylık ve avantaj sağlar. Ayrıca DB::, Validation:: ve Permission:: kütüphaneleri ile entegreli çalışır.
# Kurulum
ZN dağıtımları için kurulum gerekmez.
↓ composer require znframework/package-hypertext
# Yöntemler
# Özellikler
Tüm HTML özellikleri yöntem adı olarak kullanılarak eklenebilir.
Form::id('example')->style('red:color')-> - - -
Yukarıda kullanılan id(), style() gibi yöntemler input nesnesinin özellik değer çiftini oluşturan yapıları belirlemek için kullanılır. Bu kullanım tüm form nesneleri için ortaktır. Her Form:: nesnesi kendi parametreleri dışında bu opsiyonel yöntemler ile de parametre kullanımlarını sağlayabilir. Eğer özellik birden fazla kelime ve aralarında tire(-) içeren bir yapıda ise bu özellik yöntem olarak camelCase yani exampleElement() formunda kullanılır.
Parametreler
string | $value = NULL | Varsa özelliğin değeri. |
return | this |
Kullanımlar
@Form::required()->placeholder('Name Please')->id('name')->text('name')
Eğer form özellikleriniz data-validation gibi - ile ayrılan bir özellikse camelCase standartında yazmanız gerekir.
@Form::dataValidation('required')->myId(1)->text('name', 'Value')
<input type="text" data-validation="required" my-id="1" name="name" value="Value">
Bu güncellemede aşağıdaki düzenlemeler yapılmıştır.
Html Entity
Gönderilen veriler artık htmlentities() ile dönüştürülüyor.
boolean Gönderim
Önceden değer olarak true veya false göndermek için bu değerleri string vermek gerekiyordu. Artık gerçek boolean gönderiminde otomatik olarak string dönüşüm sağlanıyor.
@Form::abc(true)->text() # <input type="text" abc="true">
array veya Object Gönderim
Önceden array veya Object gönderiminde veri scalar olmaması nedeni ile hata üretiyordu. Artık bu veriler JSON formatına dönüştürülerek eklenmekte. Ancak tırnaklar htmlentities() ile dönüştürülüyor. Dolayısı ile verinin daha sonra kullanılabilir olması için html_entity_decode() ile dönüştürülmesi gerekir.
@Form::abc(["a" => 1])->text() # <input type="text" abc="{quotbquot:1}">
# Open (Paket >= 1.0.0)
Html <form> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımı
@Form::action('home')->method('get')->open('example-form')
3.0.1 | this | enctype(string $type) |
4.3.6 | this | csrf() |
5.4.2 | this | where(string $column, Scalar $value, string $logical = 'and') |
5.4.2 | this | query(string $query) |
5.4.2 | this | process(string $process) |
6.0.1.7 | Object | getUpdateRow() |
5.8.0.8 | this | duplicateCheck(...$columns = '*') |
5.8.4.4 | this | prevent() |
Form nesnesinin enctype değerini ayarlamak için kullanılır. Özellikle dosya yükleme işlemlerinde bu değerin kullanılması gerekmektedir.
Parametreler
string |
$type |
Tür. |
multipart - application - text |
|
return |
this |
Kullanımı
@Form::enctype('multipart')->open('upload-form')
CSRF ataklarını engellemek için token datası oluşturur.
Parametreler
return | this |
Kullanımı
@Form::csrf()->open('form')
Form'a tablo kayıtını bağlamak için kullanılır. DB::where() kullanımı ile aynıdır. Bu yöntemle doğrudan istenilen tablonun istenilen koşula göre ilgili kayıtın bağlanmasını sağlayabilirsiniz. Tablo adı olarak form nesnesinin name değeri kullanılır.
Parametreler
string | $column | Kolon adı. | |
string | $value | Kolon değeri. | |
string | $logical = 'and' | and - or | Bağlaç. |
return | this |
Kullanımı
@Form::where('id', URI::get('id'))->open('accounts')
Form NesneleriTablo tanımlamasından sonra diğer form nesneleri kayıttan gelen değeri otomatik alır. İstisna olarak checkbox, radio butonlar ve select nesnesinin kullanımı farklıdır.
Radio ButonRadio butonların seçili olabilmesi için verilen değerin gelen kayıttaki değer ile eşleşmesi gerekmektedir.
Male /: @Form::radio('gender', 1) Female/: @Form::radio('gender', 2)
Yukarıdaki tanımlamada gender kolonuna ait değer hangisi ile eşleşirse o buton seçili hale gelir.
Checkbox ButonCheckbox butonların seçili olabilmesi için verilen değerin gelen kayıttaki değer ile eşleşmesi gerekmektedir. Ancak genellikle checkbox değerleri [1,2,5,10] gibi json formunda saklanır. Json çözümlemesi otomatik olarak yapılarak ilgili butonlar seçilir.
@Form::checkbox('colors', 1) @Form::checkbox('colors', 2) @Form::checkbox('colors', 5) @Form::checkbox('colors', 20)
Yukarıdaki butonlardan hangileri eşleşirse o butonlar seçili hale gelir.
Select ListSelect nesnesinin seçili gelebilmesi için değerlerinin tanımlanmış olması gerekmektedir.
Gender/: @Form::select('gender', [1 => 'Male', 2 => 'Female'])
Yukarıdaki tanımlamada gender kolonuna ait değer hangisi ile eşleşirse o değer seçili hale gelir.
Eğer kompleks sorguları tabloya bağlamak isterseniz bu yöntemden istifade edebilirsiniz. DB::query() yönteminin kullanımı ile aynıdır.
Parametreler
string | $query | Sorgu. |
return | this |
Kullanımı
{{ Form::query(DB::string()->where('id', URI::get('id'))->accounts())->open('accounts') }}
Form'un güncellenme ve ekleme işlemini otomatik olarak yaptırabilmeniz içindir.
Parametreler
string | $process | insert - update | İşlem türü. |
return | this |
Kullanımı
@Form::where('id', 1)->process('update')->open('users')
@Form::postback()->validate('required', 'xss')->text('name')
@Form::postback()->validate('email', 'required')->text('email')
@Form::select('gender', [1 => 'Male', 2 => 'Female'])
@Form::validate('required')->textarea('about')
@Form::submit('submit', 'Submit')
@Form::close()
@Form::validateErrorMessage()
Validasyon Hata Mesajını YakalamakSubmit sonrası oluşan validasyon hatasını yakalamak için aşağıdaki 2 yöntemden yararlanılır.
Form::validateErrorMessage() Form::validateErrorarray()
Uyarı: Bu yöntemlerin değer üretebilmesi için process() yönteminin kullanılıyor olması gerekmektedir.
Form::process('update') kullanımınında form nesnelerine gelen tablo verilerini tutar.
Parametreler
return | Object |
Kullanımı
@Form::where('id', 1)->process('update')->open('users')
{[ $row = Form::getUpdateRow() ]}
@Form::close()
Form::process('insert') yöntemi ile birlikte kullanılır. Insert işlemi sırasında aynı verinin tekrar kayıt edilmesini engeller. DB::duplicateCheck() yönteminin kullanımıdır.
Parametreler
string |
...$columns = '*' |
Kontrol edilecek kolonlar. Bu parametrenin boş bırakılması durumunda tüm ID dışındaki tüm kolonlar kontrol edilir. |
return | this |
Kullanımı
@Form::duplicateCheck('message', 'subject')->process('insert')->open('accounts')
Form'un submit buton ile sayfa yenilenmesini önlemek için kullanılır. Yani bir Form::submit() nesnesi ile formun post edilmesi durumunda sayfanın yenilenmesini engellemek için kullanılır. Özellikle Form::submit() ile ajax gönderimleri yapmak istediğinizde kullanabilirsiniz.
Parametreler
return | this |
Kullanımı
@Form::prevent()->open('accounts')
@Form::vRequired()->text('name')
@Form::submit('send', 'SEND')
@Form::close()
# Close (Paket >= 1.0.0)
Html </form> kullanımının karşılığıdır.
Parametreler
return | string |
Kullanımlar
@Form::close()
# Text (Paket >= 1.0.0)
Html <form input="text"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::id('example-text')
->maxlength(10)
->text('textBox', 'Welcome!')
# Password (Paket >= 1.0.0)
Html <form input="password"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::password('password', '*****', ['maxlength' => 10])
# Textarea (Paket >= 1.0.0)
Html <textarea> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::cols(50)->rows(5)->textarea('address', 'Address')
# Submit (Paket >= 1.0.0)
Html <form input="submit"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::submit('sendSubmit', 'Send')
# Reset (Paket >= 1.0.0)
Html <form input="reset"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::reset('clear', 'Clear')
# Button (Paket >= 1.0.0)
Html <form input="submit"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::button('sendButton', 'Send')
# Radio (Paket >= 1.0.0)
Html <form input="radio"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::checked()->radio('gender', 'Female')
@Form::radio('gender', 'Male')
<input type="radio" name="gender" value="Male">
# Checkbox (Paket >= 1.0.0)
Html <form input="checkbox"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::checked()->checkbox('trueType', 'true')
@Form::checkbox('trueType', 'false')
<input type="checkbox" name="trueType" value="false">
# Select / Multiselect (Paket >= 1.0.0)
Html <select> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
array | $options = [] | Seçenekler. |
mixed | $selectedKey = NULL | Seçili anahtar. |
array | $attr = [] | Özellikler. |
return | string |
Opsiyonel Yöntemler
Kullanımlar
$options = [ '34' => 'Istanbul', '19' => 'Corum' ];
echo Form::select('cities', $options, '19');
<option value="34" >Istanbul</option>
<option value="19" selected="selected">Corum</option>
</select>
v.3.0.1 sürümü ve sonrasında seçenekleri doğrudan veritabanından çekmek isterseniz table() veya query() yöntemlerinden yararlanabilirsiniz.
echo Form::table('accounts')
->select('accountList', ['keyColumn' => 'valueColumn']);
İlk eleman için varsayılan anahtar değer tanımlaması yapmak isterseniz aşağıdaki gibi kullanabilirsiniz.
echo Form::table('accounts')->select('accountList',
[
// 'keyColumn' => 'valueColumn'
'id' => 'name',
// 'defaultKey' => 'defaultValue'
'0' => 'Musteri seciniz'
]);
Ya da
$query = DB::string()->accounts();
echo Form::query($query)->select('accountList', ['id' => 'name']);
v.3.1.0 sürümünde seçeneklerde görüntülenmesini istediğiniz veya istemediğiniz öğreleri including() ve excluding() yöntemlerini kullanarak belirleyebilirsiniz.
Bu güncelleme ile Form::table() kullanımına bağlı olarak value parametresi manipüle edilebilir hale getirildi. Özellikle çok dilli sistemlerde value'nin seçili dile bağlı olarak değiştirlmesinin istenmesi durumunda kullanılabilir.
echo Form::table('categories')->select('Category', ['ID' => function($row)
{
return $row->name;
}])
Bu güncelleme ile Form::multiselect() yönteminin 3. parametresi JSON türünde olması halinde dizi gibi algılanıp çoklu seçim yapılabilmesi sağlandı.
@Form::table('categories')->multiselect('categories[]', ['ID' => 'Name'], $row->categories)
echo Form::including([2, 3])
->select('cityList',
[
1 => 'Istanbul',
2 => 'Londra',
3 => 'Paris'
]);
// output: Londra, Paris
echo Form::excluding([2, 3])
->select('cityList',
[
1 => 'Istanbul',
2 => 'Londra',
3 => 'Paris'
]);
// output: İstanbul
# File (Paket >= 1.0.0)
Html <form input="file"> kullanımının karşılığıdır.
Parametreler
string | $name | Nesne ismi. |
bool |
$multiple = false |
Çoku dosya yüklemesi yapılabilsin mi? Bu değerin true ayarlanması durumuda dosya seçim penceresinde birden fazla dosya aynı anda seçilebilir. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::file('upload')
Çoklu upload yapılmak istendiğinde ise aşağıdaki gibi bir kullanım mümkündür.
@Form::file('upload', true)
# __Call HTML5
Tüm HTML5 nesnelerinden form nesneleri aşağıdaki örnekte olduğu gibi kullanılabilmektedir.
Parametreler
string | $name | Nesne ismi. |
string | $value = NULL | Değer. |
array | $attr = [] | Özellikler. |
return | string |
Kullanımlar
@Form::tel('myPhone')
@Form::range('myRange')
@Form::color('myColor')
Diğer tüm HTML 5'e ait form nesneleri yukarıdaki gibi kullanılabilir.
# __tostring (Paket >= 5.8.6.6)
Form yöntemlerini sıralı olarak kullanabilmenizi sağlar.
Parametreler
return | string |
Kullanımlar
@style('bootstrap')
@container
@row
@Form::open('contact')
->group()->label('name', 'Name:')->text('name')
->group()->label('subject', 'Subject:')->text('subject')
->group()->label('message', 'Message:')->textarea('message')
->close()
@endrow
@endcontainer
@script('jquery', 'bootstrap')
Yukarıdaki kullanımda dikkat edilirse form nesneleri her defasında Form:: deyimi kullanılmayarak zincirleme bir kullanım oluşturulmuştur..
# Postback (Paket >= 4.0.0)
Form submit edildiğinde form öğelerinin son değerinin korunmasını sağlamak için kullanılır.
Parametreler
bool | $postback = true | Değerler korunsun mu? False olması durumunda değerler korunmaz. | |
string |
$type = 'post' |
post - get - request | Formun method türü belirtilmişse bu değer formun mevcut method türüne göre değer alır. |
return | this |
Kullanımlar
@Form::postback()->text('name')
# Validate (Paket >= 5.4.2)
Validation::rules() yönteminin görevini üstlenir. Farklı olarak kuralları form nesnesi ile birlikte kullanabilmenizi sağlar.
Parametreler
mixed | ...$args | Kurallar dizisi. |
return | this |
Kullanımlar
@Form::validate('required', 'xss', ['minchar' => 10])->text('name')
Takma isim validasyon kontrolünün başarısızlığı durumunda dönen metinde form nesnesi isminin nasıl görüntüleneceğini ayarlarmak için kullanılır.
@Form::validate('required', 'xss', ['minchar' => 10])->alias('Name:')->text('name')
Form nesnesi üzerinden gönderilen kurallar Controller ayağında Validation::check($submitName) yöntemi ile kontrol edilmesi gerekmektedir.
@Form::open()
@Form::postback()
->validate('email', 'required')
->alias('Email/:')
->text('email')
@Form::submit('submit', 'Submit')
@Form::close()
{{ $error ?? NULL }}
<?php namespace Project\Controllers;
use Validation, Post;
class Home extends Controller
{
public function main()
{
if( ! Validation::check('submit') )
{
View::error(Validation::error('string'));
}
}
}
# vMethod [Paket >= 5.8.2]
Html ile ZN Framework'ün validasyon yöntemlerinin harmanlanmış halidir. Kullanıcıya daha kısa sürede geri bildirim sağlaması açısından html'nin validasyonu devreye girerken arkaplanda ZN'nin validasyonu devreye girer. Standart olarak bu yöntemler v harfi ile başlar. İşlev olarak ZN validasyon yöntemleri gibidir.
Yöntemler
Kullanım
@Form::open()
@Form::vMinchar(3)->text('name')
@Form::vEmail()->vMaxchar(100)->text('email')
@Form::vPhone('***-***-**-**')->text('phone')
@Form::vLimit(5, 200)->text('subject')
@Form::vMinchar(3)->vMessage('Bu alan en az 3 karakterli olmalıdır!')->textarea('message')
@Form::submit('send', 'SEND')
@Form::close()
<?php namespace Project\Controllers;
use Validation, DB;
class Home extends Controller
{
public function main()
{
if( Validation::check('send') )
{
DB::duplicateCheck()->insert('post:tickets');
}
}
}
# Serializer (Paket >= 5.8.4.1)
Bir formun tüm verilerinin ajax ile bir kontrolcüye gönderilmesini sağlar. Genellikle Form::button() yöntemi ile kullanılır.
Ön Bilgiler
● Veriler post yöntemi ile gönderilmektedir. Dolayısı ile değerlere Post::inputName() ile erişilir.
● Ajax işleminin başarılı ile gerçekleştirilmesi durumunda dönen değer javascript'in data isimli değişkeninde saklanmaktadır.
Parametreler
string | $uri | Ajax isteğinin hangi kontrolcü yöntemine yapılacağıdır. | |
mixed | $callback | Bir html nesnesinin seçiçi bilgisi veya ajax:success geri çağrım işlevi gibi kullanılabilir. | |
mixed |
$datatype = 'standart' |
Bu parametre veri türünü json formatında kabul edecek şekilde ayarlanabildiği gibi bir ajax'ın standart özellikleri dışında farklı bir özelliğin eklenmesi için kullanılabilir. | |
return | this |
Kullanımlar
@Form::open('contact-form')
@Form::text('name')
@Form::textarea('message')
@Form::serializer('Contact/ajaxSendForm', '#successDiv')->button('send', 'SEND')
@Form::close()
Yukarıda Contact/ajaxSendForm yöntemine ajax ile tüm formun verilerini gönderdik. Bu giden verileri işledikten sonra işlem sonucunu $('#successDiv').html(data) nesnesine yazdırdık. Giden veriler post yöntemi ile gönderilmektedir.
2. parametrenin {< kodlarınız >} biçiminde kullanımı ile yöntem içerisine doğrudan javascript yazabilmenizin önünü açıyor. Ajax işleminin success durumunda gelen veri data isimli javascript değişkeninde saklanmaktadır.
@Form::open('contact-form')
@Form::text('name')
@Form::textarea('message')
@Form::serializer('Contact/ajaxSendForm',
{<
if( data.success === true )
{
$('#successDiv').html('İşlem başarılı.');
}
else
{
$('#errorDiv').html('İşlem başarısız!');
}
>}, 'json')->button('send', 'SEND')
@Form::close()
Ajax işlemine datatype dışında farklı parametreler de eklemek isterseniz 3. parametrenin dizi olarak gönderilmesi gerekmektedir.
@Form::open('contact-form')
@Form::text('name')
@Form::textarea('message')
@Form::serializer('Contact/ajaxSendForm', {< swal(data) >},
[
'dataType' => 'json',
'async' => true
])->button('send', 'SEND')
@Form::close()
# Trigger (Paket >= 5.8.4.1)
Bir form nesnesinin değerinin ajax ile bir kontrolcüye gönderilmesini sağlar. Form::serializer() kullanımına çok benzer farklı olarak hangi olay ile tetikleneceğinin ayarlanabiliyor olmasıdır. Bunun dışında ajax ile sadece kendi değerini yollar. Bu kullanımından dolayı Form::text() vb. gibi form nesneleri ile kullanımı önerilir.
Ön Bilgiler
● Form nesnesinin değeri post yöntemi ve kendi ismi ile gönderilir. Yani nesnenin değeri sunucu tarafında Post::inputName() ile alınır.
● Ajax işleminin başarılı ile gerçekleştirilmesi durumunda dönen değer javascript'in data isimli değişkeninde saklanmaktadır.
● Geriçağrım kullanımında ilgili nesnenin karşılığı javascript'in element isimli değişkeninde saklanmaktadır. Örn: $(element).val() gibi kullanım gerektiren durumlar için kullanabilirsiniz.
Parametreler
string | $event | Veri gönderme işleminin hangi olay türü ile tetikleneceğini belirtir. | |
string | $uri | Ajax isteğinin hangi kontrolcü yöntemine yapılacağıdır. | |
mixed | $callback | Bir html nesnesinin seçiçi bilgisi veya ajax:success geri çağrım işlevi gibi kullanılabilir. | |
mixed |
$datatype = 'standart' |
Bu parametre veri türünü json formatında kabul edecek şekilde ayarlanabildiği gibi bir ajax'ın standart özellikleri dışında farklı bir özelliğin eklenmesi için kullanılabilir. | |
return | this |
Kullanımlar
@Form::open('contact-form')
@Form::trigger('keyup', 'Validations/control',
{<
if(data === false) swal('Geçersiz girdi!');
>})->text('name')
@Form::textarea('message')
@Form::serializer('Contact/ajaxSendForm', '#successDiv')->button('send', 'SEND')
@Form::close()
Diğer parametrelerin kullanımları Form::serializer() yöntemi ile aynıdır.