Zend_Form на всем сайте

Как я могу добавить форму в свой layout.phtml?

Я хотел бы иметь форму поиска и форму входа, которые сохраняются во всех формах на моем сайте.


person Community    schedule 05.10.2009    source источник


Ответы (2)


У меня есть сообщение в блоге, объясняющее это: http://blog.zero7ict.com/2009/11/how-to-create-reusable-form-zend-framework-zend_form-validation-filters/

В папке приложения создайте папку форм

Это пример формы:

<?php
class Form_CreateEmail extends Zend_Form
{
public function __construct($options = null)
{
    parent::__construct($options);

    $this->setName('createemail');
    $title = new Zend_Form_Element_Text('title');
    $title->setLabel('Subject')
    ->setRequired(true)
    ->addFilter('StripTags')
    ->addFilter('StringTrim')
    ->addValidator('NotEmpty');
    $info = new Zend_Form_Element_Textarea('info');
    $info->setLabel('Email Content')
    ->setAttribs(array('rows' => 12, 'cols' => 79)); 
    $submit = new Zend_Form_Element_Submit('submit');
    $submit->setAttrib('id', 'submitbutton');
    $this->addElements(array($title, $info, $submit));
}

}
?>

Затем вы можете вызвать его со своего контроллера следующим образом:

$form = new Form_CreateEmail();
        $form->submit->setLabel('Add');
        $this->view->form = $form;

И отобразите его с вашего просмотра, используя

echo $this->form;

Надеюсь это поможет.

Изменить: если вы хотите, чтобы это было включено на каждую страницу, вы можете создать новый вспомогательный файл

в папке просмотров создайте папку помощников и создайте файл loginHelper.php

class Zend_View_Helper_LoginHelper
{
    function loginHelper()
    {

$form = new Form_CreateEmail();
        $form->submit->setLabel('Add');
        return = $form;

    }
}

Это может быть выведено из вашего макета, используя:

<?php echo $this->LoginHelper(); ?>     
person Andrew    schedule 05.10.2009
comment
Пожалуйста, придерживайтесь стандартов кодирования! ваш класс должен быть Form_CreateEmail! (как в Zend_View_Helper_LoginHelper) - person Tomáš Fejfar; 05.10.2009
comment
Метод init() существует, поэтому вам не нужно __construct($options) перегружать. - person chelmertz; 03.11.2009

В вашем макете просто сделайте:

$form = new Loginform();
echo $form->render();

Вам просто нужно убедиться, что вы указали Контроллер / Действие для формы для POST, чтобы он не отправлял POST на любой Контроллер, на котором вы сейчас находитесь, что является поведением по умолчанию.

person smoove    schedule 05.10.2009