Admin Form Oluşturucu
Formu PHP'de alan alan bildirirsiniz; oluşturucu işaretlemeyi, yerleşimi ve operation'ın geri okuyacağı alan adlarını üretir.
Genel Bakış
Alanları siz tarif edersiniz, işaretlemeyi oluşturucu yazar. Bildirdiğiniz ad isteğe ulaşan addır; yani form ile onu alan kod, elle yazılmış işaretlemenin ayrıştığı gibi ayrışamaz.
Alan metotları oluşturucuyu döndürür, yani çağrılar zincirlenir. Hepsi bir seçenek dizisiyle biter ve işe yarar davranışın çoğu o dizide yaşar.
Referans
Formu Kurma
public function __construct(?string $formId, ?string $action = '', ?array $options = []);
// $formId formun DOM id'si; bu formu hedefleyen JavaScript kullanır
// $action nereye gönderdiği; genellikle controller adresi
// $options ['disableStickySubmit' => true] sabitlenmiş gönder çubuğunu kaldırır
Alan İmzaları
Parametre sırasını dikkatle okuyun. Bazı alanlar göründüğünden fazla argüman alır ve fazlalıklar sonda değil ortada durur.
public function addText($name, $label = '', $value = '', $options = []): self;
public function addEmail($name, $label, $value = '', $options = []): self;
public function addPassword($name, $label = '', $value = '', $options = []): self;
public function addNumber($name, $label = '', $value = '', $options = []): self;
public function addAmount($name, $label = '', $value = '', $options = []): self;
public function addDate($name, $label = '', $value = '', $options = []): self;
public function addColor($name, $label = '', $value = '', $options = []): self;
public function addFile($name, $label = '', $value = '', $options = []): self;
public function addArea(string $name, string $label, string $value = '', array $options = []): self;
public function addHidden(string $name, string $value = '', array $options = []): self;
// Buradaki $options SEÇENEK HARİTASIDIR (değer => etiket), $fieldOptions alanın ayarlarıdır.
public function addSelect(string $name, string $label, array $options = [], $selected = '', array $fieldOptions = []): self|string;
// YEDİ parametre. $value işaretlendiğinde gönderilen değer, $checked ise mevcut durumdur.
public function addCheckbox(string $name, $groupLabel = '', $labelDesc = '', $value = '', $checked = false, array $rowOptions = [], array $options = []): self;
public function addSwitch(string $name, $groupLabel = '', $labelDesc = '', $value = '', $checked = false, array $rowOptions = [], array $options = []): self;
// Kurulu dil başına bir alan.
public function addMultiLang(string $type, string $name, string $label, array $langList, array $values, string $currentLang = '', array $options = []): self;
// Bunlar konumsal argüman değil tek bir tanım dizisi alır.
public function addRadioGroup(array $options = []): self;
public function addCheckboxGroup(array $options = []): self;
// Var olan bir alana göre araya sokar; bir modülün sahibi olmadığı formu böyle genişletir.
public function addFieldBefore(string $targetElementId, string $type, array $options = []): array;
public function addFieldAfter(string $targetElementId, string $type, array $options = []): array;
public function render(array $options = []): string;
Seçenek Dizisi Neyi Kabul Eder
['dir' => 'ltr', 'autocomplete' => 'off', 'required' => 'required'].
Her Değerin Biçimi
| Alan | Ne gönderirsiniz | İsteğe ne ulaşır |
|---|---|---|
| text, area, email, password | mevcut dize | dize, her zaman var |
| number, amount | mevcut sayı | cast edeceğiniz bir dize |
| select | ['live' => 'Canlı', 'test' => 'Test'] artı seçili anahtar | seçilen anahtar |
| checkbox, switch | gönderilecek değer, sonra mevcut durum (boolean) | gönderilen değer, işaretli değilse hiçbir şey |
| çok dilli | dil listesi ve dil => değer haritası | name[en], name[tr], dil başına bir tane |
| file | gösterim için mevcut yol | dosya kaynağından okunan bir yükleme kaydı |
Örnek
Bir modül ayar formu, sonra onu geri okuyan operation. İki yarım bilerek birlikte gösteriliyor: adların eşleşmesi gerekir ve yukarıdaki biçimlerin önem kazandığı yer okuma tarafıdır.
$form = new AdminFormBuilder('acmeSettingsForm', $actionUrl, ['disableStickySubmit' => true]);
// Dağıtıcının hangi operation'ı koşturacağını bilmesi için form içinde taşınır.
$form->addHidden('operation', 'save_acme_settings');
$form->addText('api_endpoint', $lang['api-endpoint'], $config['api_endpoint'] ?? '', [
'placeholder' => 'https://api.example.com',
'description' => $lang['api-endpoint-desc'],
'attributes' => ['dir' => 'ltr', 'autocomplete' => 'off', 'spellcheck' => 'false'],
]);
$form->addPassword('api_key', $lang['api-key'], $config['api_key'] ?? '', [
'description' => $lang['api-key-desc'],
]);
// Üçüncü argüman SEÇENEK HARİTASI, dördüncüsü seçili anahtar.
$form->addSelect('mode', $lang['mode'], ['test' => $lang['test'], 'live' => $lang['live']], $config['mode'] ?? 'test', [
'description' => $lang['mode-desc'],
]);
// Yedi parametre: ad, grup etiketi, kutunun yanındaki etiket, GÖNDERİLEN değer,
// mevcut durum, satır seçenekleri, alan seçenekleri.
$form->addSwitch('log_requests', $lang['logging'], $lang['logging-enable'], '1', (int) ($config['log_requests'] ?? 0) === 1);
echo $form->render();
public function save_acme_settings(Operation $operation): bool
{
$operation->demo();
$endpoint = Filter::init("POST/api_endpoint", "hclear");
if (!$endpoint) throw new Exception(Language::gc("acme/error-endpoint-required"));
$data = [
'api_endpoint' => $endpoint,
// Geçirgen: diğer bütün filtreler bir anahtarı güçlü kılan karakterleri kaldırır.
'api_key' => Filter::init("POST/api_key", "password"),
'mode' => Filter::init("POST/mode", "letters"),
// İşaretsiz bir anahtar HİÇBİR ŞEY göndermez, yani yokluk "kapalı" değeridir.
'log_requests' => Filter::init("POST/log_requests", "rnumbers") ? 1 : 0,
];
if (!Modules::getInstance('Addons', 'Acme')->save_config($data))
throw new Exception(Language::gc("acme/error-save-failed"));
return $operation->output(['status' => "successful"]);
}
Tuzaklar
Üçüncüsü kutunun yanında görünen etikettir. Dördüncüsü gönderilen değer, beşincisi ise şu an işaretli olup olmadığıdır. Mevcut durumu üçüncü sıraya geçirmek onu sessizce etikete çevirir ve kutu kayıtlı ayarı hiçbir zaman yansıtmaz.
Sıfır değil, yoktur. Yalnız aldığını yazan kod önceki ayarı sonsuza dek korur; bu yüzden yokluğu açıkça "kapalı" olarak okuyun.
Her metin filtresi tam olarak bir anahtarı ya da parolayı güçlü kılan karakterleri kaldırır ve kaydedilen değer yazılandan sessizce farklı olur. Filtrelemenin hata olduğu tek alan budur.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.