Admin Form Oluşturucu

1.7k görüntülenme Markdown

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

imza
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.

tam imzalar
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

placeholder Girdinin içindeki ipucu metni. Etiket değil ipucudur; alanın etiketi yine gerekir.
description Alanın altındaki yardım metni. Bir kuralın ya da sonucun yeri burasıdır.
attributes Girdiye yazılan ham HTML öznitelik haritası: ['dir' => 'ltr', 'autocomplete' => 'off', 'required' => 'required'].
id Sabit bir DOM id'si; bu alanı bulması gereken JavaScript için.

Her Değerin Biçimi

AlanNe gönderirsinizİsteğe ne ulaşır
text, area, email, passwordmevcut dizedize, her zaman var
number, amountmevcut sayıcast edeceğiniz bir dize
select['live' => 'Canlı', 'test' => 'Test'] artı seçili anahtarseçilen anahtar
checkbox, switchgönderilecek değer, sonra mevcut durum (boolean)gönderilen değer, işaretli değilse hiçbir şey
çok dillidil listesi ve dil => değer haritasıname[en], name[tr], dil başına bir tane
filegösterim için mevcut yoldosya 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
$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();
onu alan operation
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

Checkbox yedi argüman alır ve ortadakiler kolayca karışır

Üçü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.

İşaretsiz kutu hiçbir şey göndermez

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.

Sırrı geçirgen filtreyle 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.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.