Form işleme kodu soyutlanmış gerekiyor mu?

3 Cevap php

Zend Altyapıları öğreticiler, ben gibi bir form işleme kodunu görebilirsiniz

if ($request->isPost()) {
            $formData = $request->getPost();

            $code = $request->getParam("code");
        	$url = $request->getParam("url");

            if ($form->isValid($formData)) {
            // here goes code to determine insert/update action, 
            //retrive record data
            //and perform relative database operation

This code repeats for many forms. I am trying to make form handling better, yet not to over-engineer it. So far I have moved this code from Controllers into Form object. But the code still diplicates for different form types.

My question is this - Should I prefer to keep form handling code duplicate or write some ProcessSubmit() Zend_Form method that will be used by all subclasses? I had experience that abstraction is not always good and sometimes you end up synching two classes that shoul've been different from beginning.

ZF örnekler yinelenen kod göstermek, bu nedenle bu iki yüzlülük (en azından küçük 3-4 formu siteler için) justifed veya tüm yollarla kaçınılması gerekiyor merak ediyorum.

P.S. Bu görev oldukça yaygın olduğu görünüyor, ben iki işi merak ediyorum ve CRUD belirli bir form işleme için bir ZF sınıf zaten var.

3 Cevap

Belki bir action helper olabilir, iyi, help Seni burada:

class App_Controller_Action_Helper_ProcessFormSubmit extends Zend_Controller_Action_Helper_Abstract
{
    public function isValid(Zend_Form $form)
    {
        if ($this->getRequest()->isPost()) {
            return $form->isValid($this->getRequest()->getPost());
        } else {
            return false;
        }        
    }

    public function direct(Zend_Form $form)
    {
        return $this->isValid($form);
    }

}

Bu, böyle form gönderme işleme ele verir:

// or: if ($this->_helper->processFormSubmit->isValid($form)) {
if ($this->_helper->processFormSubmit($form)) {
    // here goes code to determine insert/update action, 
    //retrive record data
    //and perform relative database operation
}

Bu ihtiyaçlarına uzatılabilir, örneğin Otomatik hata işleme ve böylece ...

Ne ben aslında yapmış etki alanı nesneleri (ya da modeli katmanı) içine doğrulama taşımak oldu, ve sonra benim etki alanı katman save () yöntemini uygular.

Benim etki alanı katman Zend_Form kullanmayın, ben her etki alanı modeli için her yerde tutarlı bir form mevcut böylece başkalarının kendi etki modellerinde bir Zend_Form örneğini uygulayacak fark etmişsinizdir. Şahsen ben bu çiftler alanı çok fazla sunum katmanı nesneleri hissediyorum.

Bunun yerine, benim etki alanı nesneleri doğrulama için omurga olarak Zend_Filter_Input kullanırım.

Eğer formu doğrularken sonra "ince kontrolörleri / yağ modelleri" kullanmak istiyorsanız sadece modeline tüm formu veya form değerleri geçirmek.

Controller kontrol yapıları gelince onlar "normal" dir.