создание пользовательского элемента формы в Zend_Form - PullRequest
1 голос
/ 13 января 2010

Я пытаюсь создать настраиваемое поле формы в 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 /: / главная / MySite / приложение / просмотров / помощники /

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

спасибо.

Ответы [ 2 ]

9 голосов
/ 14 января 2010

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

в /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');
    }
}

в /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;
    }
}
4 голосов
/ 13 января 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');
...