Nasıl OOP ile dinamik bir PHP form oluşturmak için?

3 Cevap php

Nasıl ben istiyorum kaç alanlar gibi farklı türde alanları ile yeni bir form, görüntülemek için kullanabileceğiniz bir gerçek dünya form oluşturma sınıf oluşturma hakkında gitmek istiyorum, ben açılan çıkışlar kullanabilir ve ben OOP kullanarak tüm bu yapabilirim?

3 Cevap

Sen kesinlikle olabilir. method, action, enctype bağlıyor: formun kendisi hakkında bilgi depolayan bir Form sınıfı düşünün. Ayrıca üstünde isteğe bağlı başlık ve / veya açıklama metni gibi şeyler atmak. Tabii ki de girdi elemanlarının bir dizi gerekir. Bunlar muhtemelen (InputText, InputCheckbox için onları sınıflara rağmen, InputRadio belki biraz üstünde olabilir) kendi sınıfının içine koymak olabilir. Burada belirsiz bir iskelet tasarımı bulunuyor:

class Form {
    var $attributes,    // array, with keys ['method' => 'post', 'action' => 'mypage.php'...]
        $heading,
        $description,
        $inputs        // array of FormInput elements
    ;

    function render() {
        $output = "<form " . /* insert attributes here */ ">"
              . "<h1>" . $this->heading . "</h1>"
              . "<p>" . $this->description . "</p>"
        ;
        // wrap your inputs in whatever output style you prefer:
        // ordered list, table, etc.
        foreach ($this->inputs as $input) {
            $output .= $input->render();
        }
        $output .= "</form>";
        return $output;
    }
}

FormInput sınıfı böyle türü, adı, değer, etiket gibi temel, saklamak gerekir. Eğer zor almak istedim, o zaman işlerken sonra Javascript dönüştürülmüş olacaktır doğrulama kuralları geçerli olabilir.

Dürüst olmak gerekirse ben PHP için orada bir kaç olgun formu paketleri vardır düşünüyor, kendi rulo olmaz.

Ben (http://pear.php.net/manual/en/package.html.html-quickform.php) PHP4 siteler için PEAR'ın HTML_QuickForm paketini kullanabilirsiniz.

PHP5 için, ben Zend_Form içine bir göz olurdu (http://framework.zend.com/manual/en/zend.form.html).

Benim quickform kod için, bana bir yapılandırma dizi kullanarak formları tanımlamak sağlayan yardımcı sınıf kullanın. Örneğin:

echo QuickFormHelper::renderFromConfig(array(
  'name' => 'area_edit',
  'elements' => array(
    'area_id'           => array('type' => 'hidden'),
    'active'            => array('type' => 'toggle'),
    'site_name'         => array('type' => 'text'),
    'base_url'          => array('type' => 'text'),
    'email'             => array('type' => 'text'),
    'email_admin'       => array('type' => 'text'),
    'email_financial'   => array('type' => 'text'),
    'cron_enabled'      => array('type' => 'toggle'),
    'address'           => array('type' => 'address'),
  ),
  'groups' => array(
    'Basic Details'   => array('site_name', 'base_url'),
    'Address Details' => array('address'),
    'Misc Details'    => array(), // SM: Display the rest with this heading.
  ),
  'defaults' => $site,
  'callback_on_success' => array(
    'object' => $module,
    'function' => 'saveSite',
   ),
));

Yukarıdaki eleman türleri 'adres' ve 'değiştir' gerçek çoklu form alanları (temelde, meta-tipleri) olduğunu unutmayın. Bu benim bu yardımcı sınıf hakkında ne aşk - I (adres, credit_card, vb gibi) kendi kurallarıyla alanlarında standart bir grup tanımlayabilirsiniz ve tutarlı bir şekilde sayfaları çok kullanılabilir.

Sadece başvuru için Object Oriented Forms Khurram Khan tarafından PHP için mükemmel bir OO formları uygulamasıdır.

İşte kod neye benzediğini bir örnek:

$form = new Form("Register", "form.php"); 

$personal = new Block("Personal Information"); 

$name = new Text("name", "Your name"); 
$name->setDescription("this is my description"); 
$name->addValidator(new MaxLengthValidator("The name you have entered is too long", 30)); 

...

Başka daha popüler uygulamasıdır PHPlib. Ancak, bu biraz aksak olarak bulmak; Bir sınıfta sarılmış sadece bazı standart fonksiyonel programlama gibi görünüyor.

Başka bir seçenek için bir soyutlama yazıyor olacağını DOM kütüphanede inşa. Bu el sizin başka bir yerde programında kullanılabilecek bir OO DOM örneğini iade edilecektir yararı ile, OO notasyonu kullanarak form ve form elemanının her türlü oluşturmak için izin verir.