Zend Framework форма не отображается - PullRequest
2 голосов
/ 08 февраля 2011

Я начинаю работать с Zend Framework. Я столкнулся с этой проблемой с формами.при открытии localhost / item / create в браузере отображается только привет, форма не отображается.

что я сделал: я создал контроллер в своем проекте с zf.sh create controller item, затем zf.sh create action create item.Внутри папки библиотеки созданный App-> forms-> ItemEditor.php

    <?php

class App_forms_ItemEditor extends Zend_Form
{
    public function __construct()
    {
        $email = $this->createElement('text', 'email');
        $email->setLabel('Your email address:');
        $email->setRequired(TRUE);
        $email->addValidator(new Zend_Validate_EmailAddress());
        $email->addFilters(array(
        new Zend_Filter_StringTrim(),
        new Zend_Filter_StringToLower()
        ));
        $email->setAttrib('size', 40);
        $this->addElement($email);

    }
}

объявил свое пространство имен в файле application.ini

autoloaderNamespaces[] = "App_"

Inside views-> scripts-> item->create.phtml сделал это:

hello
<?php
echo $this->form->render();
?>

, а затем внутри ItemController.php:

public function createAction()
    {
        $this->view->form=new App_forms_ItemEditor();
    }

в браузере отображается только привет, остальная часть формы не отображается.Кто-нибудь может указать, что я делаю неправильно.спасибо

Ответы [ 2 ]

4 голосов
/ 08 февраля 2011

Я думаю, причина в том, что вы перезаписали Zend_Form :: __ constructor ().Формы, расширяющие Zend_Form, должны использовать функцию init() для инициализации своих элементов, а не __constructor().

3 голосов
/ 08 февраля 2011

Лучшее место для создания элементов формы - переопределить метод init(), например

class App_forms_ItemEditor extends Zend_Form
{
    public function init()
    {
        $email = $this->createElement('text', 'email');
        $email->setLabel('Your email address:');
        $email->setRequired(TRUE);
        $email->addValidator(new Zend_Validate_EmailAddress());
        $email->addFilters(array(
        new Zend_Filter_StringTrim(),
        new Zend_Filter_StringToLower()
        ));
        $email->setAttrib('size', 40);
        $this->addElement($email);

    }
}

Если вы взломали Zend_Form::__construct(), вы должны по крайней мере принять те же аргументы и передать их, используя parent::__construct()

Кроме того, я немного не уверен насчет строчной буквы "f" в части "form" имени вашего класса. Из памяти автозагрузчик модуля переводит часть имени «Форма» в каталог «формы» в вашем модуле.

Однако я отмечаю, что вы не используете автозагрузчик модуля (или, по крайней мере, вы не показали, что вы используете)


Относительно автозагрузчиков модулей ...

Процесс начальной загрузки регистрирует автозагрузчик модуля, используя настроенное значение appnamespace (обычно «Приложение») с базовым путем «приложение».

Автозагрузчик модуля автоматически регистрирует некоторые сопоставления имен / путей классов для классов, начиная с настроенного пространства имен (например, «Application_»). Это включает в себя формы.

По сути, это означает, что вы можете создавать формы в application/forms/MyForm.php с именем класса Application_Form_MyForm, и автозагрузчик найдет его.

Откройте `Zend_Application_Module_Autoloader", чтобы увидеть полный список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...