2012-03-18 3 views
3

У меня есть форма со всем полем, которое отображает объект. Из этого я бы сгенерировал подформат внутри класса Form. Я пытаюсь сделать это с помощью группы display, но при вызове «subform» в контроллере тег формы не генерируется. как я могу решить? ThanksКак сгенерировать подформа формы - Zend Framework

это код.

<?php 
    $username = new Zend_Form_Element_Text('user'); 
    ...//param for field 
    $password = new Zend_Form_Element_Password('pwd'); 
    ...//param for field 
    $name = new Zend_Form_Element_Text('name'); 
    ...//param for field 
    $submit = new Zend_Form_Element_Submit('submit'); 
    ...//param for field 
    $this->addElement(array($user,$password,$name,$submit)); 
    $this->addDisplayGroup(array($user,$password,$submit),'login'); 
    $this->addDisplayGroup(array($user,$password,$name, $submit),'create'); 
?> 
+1

Можете ли вы предоставить исходный код? –

+0

Я отправил немного кода –

ответ

10

Подчиненная это нечто иное, чем дисплей группы. A subform - пример Zend_Form_SubForm, вложенный в экземпляр Zend_Form. Вы можете использовать это, чтобы вставить одну форму в другую. Например, у вас может быть форма профиля пользователя и форма регистрации. В регистрационной форме вы можете ввести значения профиля, а также некоторые другие данные. Таким образом, вы можете использовать эту форму профиля в качестве подформы, встроенной в регистрационную форму. Субформа в основном используется для DRY (не повторяйте себя) принципов или для создания многостраничной формы.

A display group - это просто визуальное представление некоторых элементов формы, сгруппированных вместе. В синтаксисе html это называется fieldset. Основная цель - создать группы элементов, которые принадлежат друг другу. Например, в корзине покупок у вас может быть адресная группа счетов и группа адресов доставки. Такая группа отображения в основном используется для семантики и визуального представления.

О самых больших различиях является то, что для групп отображения форма имеет представление об этих элементах формы, как и в случае с субформами, форма не имеет представления об элементах подформ. При этом я заметил, что вы хотите создать одну форму, содержащую две группы отображения: один при входе в систему, когда вы создаете (или регистрируете) пользователя. С приведенным выше вы не можете использовать группы отображения для этого. Одним из вариантов является использование двух форм экземпляров:

class LoginForm extends Zend_Form 
{ 
    public function init() 
    { 
     $this->addElement('text', 'user'); 
     $this->addElement('password', 'pwd'); 
     $this->addElement('submit', 'submit'); 
    } 
} 

class RegisterForm extends Zend_Form 
{ 
    public function init() 
    { 
     $this->addElement('text', 'user'); 
     $this->addElement('password', 'pwd'); 
     $this->addElement('text', 'name'); 
     $this->addElement('submit', 'submit'); 
    } 
} 

Если вы хотите использовать поля user и pwd вы можете захотеть использовать субформ для этого:

class BaseForm extends Zend_Form_SubForm 
{ 
    public function init() 
    { 
     $this->addElement('text', 'user'); 
     $this->addElement('password', 'pwd'); 
    } 
} 

class LoginForm extends Zend_Form 
{ 
    public function init() 
    { 
     $subform = new BaseForm; 
     $this->addSubform($subform, 'base'); 

     $this->addElement('submit', 'submit'); 
    } 
} 

class RegisterForm extends Zend_Form 
{ 
    public function init() 
    { 
     $subform = new BaseForm; 
     $this->addSubform($subform, 'base'); 
     $this->addElement('text', 'name'); 

     $this->addElement('submit', 'submit'); 
    } 
} 

В обоих случаях вы можете просто инстанцирован одна из этих форм в вашем контроллере:

public function loginAction() 
{ 
    $form = new LoginForm(); 
    // More code here 

    $this->view->form = $form; 
} 

public function registerAction() 
{ 
    $form = new RegisterForm(); 
    // More code here 

    $this->view->form = $form; 
} 
+0

Большое спасибо за объяснение !!! Я сделаю то, что вы предложили. –

+0

Это очень хорошее объяснение – Tarun

+0

приятное объяснение и пример! Благодаря! – artsylar

2

Zend_Form_SubForm не оказывает <form> тегов по умолчанию.

Чтобы сделать это, вам необходимо добавить декоратор 'Form' к экземпляру подформы, прежде чем вы его визуализируете.

Try:

$mySubForm->addDecorator('HtmlTag', array('tag' => 'dl', 'class' => 'zend_form')) 
      ->addDecorator('Form'); 

, а затем, в своем скрипте, вы можете сделать:

<?php echo $this->mySubForm; ?>