Zend Framework: mimarlar ve etiket ayarlama - bu görünümünde veya Form sınıfta yapılmalı?

0 Cevap php

Ben Zend Framework ile çalışan pek çok (çoğu?) Insan Form sınıfının kendisi dekoratörler ve etiket eklemek fark.

class User_Form_Add extends Zend_Form
{
    public function init()
    {
        parent::init();
        $username = new Zend_Form_Element_Text('username');
        $username->setLabel('Username:')
                 ->setRequired(true)
                 ->addFilter('StringTrim')
                 ->addValidator('StringLength', $breakChainOnFailure = false, $options = array(1, 30))
                 ->setDecorators(array(
                     'ViewHelper',
                     array('Description', array('tag' => 'p', 'class' => 'description')),
                     array('Label',       array('requiredPrefix'      => '<span class="asterisk">*</span>&nbsp;', 'escape' => false)),
                     array('HtmlTag',     array('tag' => 'p', 'class' => 'element'))
                 ));
    }
}

Ama kesinlikle bu iyi bir uygulama değildir? Ben dekoratörler ve etiketler bir MVC uygulamada görünüm katmanın parçası olduğunu sanırdım. Ben bu formu sınıf baktığınızda, bu biçimlendirme, etiketleri ve görünümü katmanda olmalıdır metnin her türlü "poluted" görünüyor.

Bu yaklaşım size form biçimlendirme ile keman gerekiyorsa, form sınıfının and viewscript hem de çalışmak gerekiyor demektir.

Ben bu kavramı sevmiyorum, ve ben formları işleme olduğumda böylece gerçek görünümü komut içine formları ve dekoratörler ayıran edilmiştir. Ben ayrı benim uygulama bu çelişkili "endişeleri" tutmak istiyorum.

class User_Form_Add extends Zend_Form
{
    public function init()
    {
        parent::init();
        $username = new Zend_Form_Element_Text('username');
        $username->setRequired(true)
                 ->addFilter('StringTrim')
                 ->addValidator('StringLength', $breakChainOnFailure = false, $options = array(1, 30));
    }
}

/ / Add.phtml:

$this->form->username->setLabel('Username:');
$this->form->username->setDecorators(array(
    'ViewHelper',
    array('Description', array('tag' => 'p', 'class' => 'description')),
    array('Label',       array('requiredPrefix'      => '<span class="asterisk">*</span>&nbsp;', 'escape' => false)),
    array('HtmlTag',     array('tag' => 'p', 'class' => 'element'))
));

echo $this->form->render();

Bu temiz, ve bir model sınıfı oldukça benzer form sınıfı bırakır - ben form sınıf olmak çektiklerindeki nasıl; Bu ilgili tüm iş mantığı olan filtreler, doğrulayıcılar vb içerir.

Etajer unnessesarily dekoratörler ve yaratılan olmanın yükü olmadan - Eğer bu yaklaşım takip ederseniz, o kolay modelleri içinde doğrudan form doğrulayıcılar ve filtreleri erişmek / senin modelleri ile yeniden olabilir böyle formlar entegre yapar.

http://weierophinney.net/matthew/archives/200-Using-Zend_Form-in-Your-Models.html

Bildiğim kadarıyla KURU sizin bakış komut tutmak gibi, sen, ben buluyorum birden çok kez aynı etiketleri ve dekoratörler (aynı formu birden çok kez işlemek, ancak farklı görünüm komut dosyaları gerektiğinde yani) gibisin böyle size yeniden ayırabilirsiniz KURU şeyleri tutmak için ViewScript dekoratör kullanarak bir form-kullanılabilir parçalar.

EDIT: Yanı sıra, biz de unnessesarily ilk etapta dekoratörler bildirmek zorunda kalmamak için projemize uygun olanlarla varsayılan dekoratörler kılabilirsiniz.

So my actual question is this:

Neden başkasının bu gibi kendi formları ile çalışmıyor? Ne sakıncaları Bu yaklaşım görüyorsunuz?

Ben sadece kolayca görünümü katmanda ekleyebilirsiniz eğer Neden dekoratörler ve form etiketleri, form sınıfının oluşturulmalıdır?

Neredeyse her kullanım Zend_Form Ben form sınıfının kendisi dekoratörler / etiketleri ekleyerek, bakın neden alamadım.

0 Cevap