создание пользовательского элемента формы в Zend_Form

Я пытаюсь создать пользовательское поле формы в Zend_Form для хранения фрагмента HTML, необходимого для SWFUpload (для целей загрузки файлов флэш-памяти).

Я пробовал следовать нескольким разным учебникам, но я сильно запутался, пока это то, что у меня есть:

/application/forms/elements/SwfUpload.php
                            SwfUploadHelper.php

Эти файлы автоматически загружаются в Bootstrap (ну, SwfUpload.php, конечно же).

SwfUpload.php:

class Custom_Form_Element_SwfUpload extends Zend_Form_Element
{
    public $helper = 'swfUpload';
}

SwfUploadHelper.php:

class Custom_Form_Helper_SwfUpload extends Zend_View_Helper_FormElement
{
    public function swfUpload()
    {
        $html = '<div id="swfupload-control">
                    <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p>
                    <input type="button" id="button" />
                    <p id="queuestatus" ></p>
                    <ol id="log"></ol>
                </div>';
        return $html;
    }
}

когда я создаю экземпляр этого класса следующим образом:

class Form_ApplicationForm extends Zend_Form
{
    public function init()
    {
        $custom = new Custom_Form_Element_SwfUpload('swfupload');
        // etc etc

Я получаю эту ошибку:

Сообщение: Плагин с именем «SwfUpload» не найден в реестре; используемые пути: Zend_View_Helper_: Zend/View/Helper/:/home/mysite/application/views/helpers/

Дело в том, что он ожидает, что мой помощник будет в «home/mysite/application/views/helpers/»? Я попытался создать там тот же помощник с именем файла «SwfUpload.php», но ошибка остается. Не уверен, что это просто проблема с именем файла/путем или что-то еще.

благодаря.


person robjmills    schedule 13.01.2010    source источник
comment
Вот вопрос, подобный вашему: stackoverflow.com/ вопросы/2056737/   -  person Emil Ivanov    schedule 13.01.2010
comment
на самом деле это и мой вопрос, я не собираюсь спамить, но это сложно в stackoverflow, когда вопрос меняется тактично, как этот. это был скорее случай теории, это скорее случай устранения неполадок.   -  person robjmills    schedule 13.01.2010


Ответы (2)


Вот что у меня получилось, надеюсь, это поможет кому-то еще:

in /application/forms/elements/SwfUpload.php

class Custom_Form_Element_SwfUpload extends Zend_Form_Element
{
    public $helper = 'swfUpload'; # maps to method name in SwfUpload helper
    public function init()
    {
        $view = $this->getView();
        $view->addHelperPath(APPLICATION_PATH.'/views/helpers/', 'Custom_Form_Helper');
    }
}

in /application/views/helpers/SwfUpload.php

class Custom_Form_Helper_SwfUpload extends Zend_View_Helper_FormElement
{
    public function init(){} 

    public function swfUpload()
    {
        $html = '<div id="swfupload-control">
                    <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p>
                    <input type="button" id="button" />
                    <p id="queuestatus" ></p>
                    <ol id="log"></ol>
                </div>';
        return $html;
    }
}
person robjmills    schedule 14.01.2010

Документация по API для Zend_Form_Element

void __construct (string|array|Zend_Config $spec, [ $options = null])

    * string|array|Zend_Config $spec
    * $options

$spec may be:

    * string: name of element
    * array: options with which to configure element
    * Zend_Config: Zend_Config with options for configuring element

    * throws: Zend_Form_Exception if no element name after initialization
    * access: public

Видишь, что выкидывает? Пытаться

$custom = new Custom_Form_Element_SwfUpload('upload');
person Gordon    schedule 13.01.2010
comment
только что сам это заметил, д'о. - person robjmills; 13.01.2010