Пользовательские формы Zend Framework с viewScript

У меня возникли некоторые проблемы при разработке пользовательских форм в Zend Framework.

Я следовал различным инструкциям, но ни один из них не работает. Ничего не делается.

Вот биты кода, которые я пытаюсь использовать (весь код ниже находится в модуле по умолчанию). Я упростил код до одного входа для теста.

приложения /формы /One /Nametest.php

class Application_Form_One_Nametest extends Zend_Form {

    public function init() {

        $this->setMethod('post');

        $name = new Zend_Form_Element_Text('name');
        $name->setLabel('Box Name')
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty');

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Submit Message');
        $submit->setAttrib('id', 'submitbutton');
        $submit->setAttrib('class', 'bluebutton');

        $this->addElements(array($name, $submit));
    }

}

Приложение /просмотров /скрипты /один /formlayout.phtml

<form action="<?= $this->escape($this->form->getAction()) ?>" method="<?= $this->escape($this->form->getMethod()) ?>">

    <p>
        Please provide us the following information so we can know more about
        you.
    </p>

    <? echo $this->element->name ?>
    <? echo $this->element->submit ?>

</form>

приложение /контроллеры /IndexController.php

public function formtestAction() {
    $form = new Application_Form_One_Nametest();
    $form->setDecorators(array(array('ViewScript', array('viewScript' => 'one/formlayout.phtml'))));

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

Приложение /просмотров /скрипты /индекс /formtest.phtml

<h1>Formtest</h1>
<?
echo $this->form;       
?>

Приведенный выше код не выдает никаких ошибок и не отображает какую-либо часть formlayout.phtml, включая теги формы или текст между тегами p.

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

7 голосов | спросил someuser 9 FriEurope/Moscow2011-12-09T09:35:44+04:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2011 09:35:44 +0400 2011, 09:35:44

3 ответа


0

Я думаю, что проблема в декораторе вашего элемента формы. Вы должны установить декоратор только ViewHelper и Error. Это работает для меня по крайней мере.

Вот код, который я использовал, и он должен работать

приложения /формы /form.php

class Application_Form_Form extends Zend_Form {

public function loadDefaultDecorators() {
    $this->setDecorators(
        array(
            array(
                'ViewScript',
                array(
                    'viewScript' => 'index/formlayout.phtml',
                )
            )
        )
    );
}

    public function init() {
        $this->setAction('/action');
        $this->setMethod('post');

        $this->addElement('text', 'name', array(
            'decorators' => array('ViewHelper', 'Errors')
        ));
    }
}

Приложение /просмотров /скрипты /индекс /formlayout.phtml

<form action="<?php echo $this->element->getAction(); ?>" method="<?php echo $this->element->getMethod(); ?>">
  <div>
    <label for="name">Box Name</label>
    <?php echo $this->element->name; ?>
  </div>

  <input type="submit" value="Submit Message" id="submitbutton" class="bluebutton">
</form>

Приложение /просмотров /скрипты /индекс /index.phtml

<!-- application/views/scripts/index/index.phtml -->
<?php echo $this -> form; ?>

приложение /контроллеры /IndexController.php

public function indexAction() {
    $form = new Application_Form_Form();
    $this -> view -> form = $form;
}
ответил Bing 4 AMpThu, 04 Apr 2013 00:53:48 +040053Thursday 2013, 00:53:48
0

Вот очень простой пример адаптации этой статьи . /р>

Форма: -

class Application_Form_Test extends Zend_Form
{
    public function init()
    {
        $this->setMethod('POST');
        $this->setAction('/');
        $text = new Zend_Form_Element_Text('testText');

        $submit = new Zend_Form_Element_Submit('submit');

        $this->setDecorators(
                array(
                    array('ViewScript', array('viewScript' => '_form_test.phtml'))
                    )
                );

        $this->addElements(array($text, $submit));
        $this->setElementDecorators(array('ViewHelper'));
    }
}

Порядок, в котором setDecorators(), addElements() и setElementDecorators() здесь очень важны.

Скрипт вида _form_test.phtml можно вызывать как угодно, но он должен быть в /views/scripts, чтобы он мог быть найден средством визуализации.

/views/scripts/_form_test.phtml будет выглядеть примерно так: -

<form id="contact" action="<?php echo $this->element->getAction(); ?>" 
      method="<?php echo $this->element->getMethod(); ?>">

<p>
Text<br />
<?php echo $this->element->testText; ?>
</p>

<p>
<?php echo $this->element->submit ?>
</p>

</form>

Вы создаете экземпляр формы, передаете ее в представление и визуализируете как обычно. Вывод из этого примера выглядит следующим образом: -

<form id='contact' action='/' method='post'>
    <p>
        Text<br />
        <input type="text" name="testText" id="testText" value=""></p>
    <p>

    <input type="submit" name="submit" id="submit" value="submit"></p>
</form>

Этого должно быть достаточно, чтобы вы начали создавать свои собственные формы.

ответил vascowhite 10 SatEurope/Moscow2011-12-10T01:08:30+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 01:08:30 +0400 2011, 01:08:30
0

Обычно, если вы ничего не видите на экране, это означает, что произошла какая-то ошибка. Может быть, у вас отключены ошибки или что-то, а может и нет. Я просто пытаюсь дать вам идеи.

Единственное, что я мог заметить, где следующее. В приведенном ниже коде вы все равно должны указать форму при попытке распечатать элементы.

 <form>
action="<?php $this->escape($this->element->getAction()) ?>" 
method="<?php $this->escape($this->element->getMethod()) ?>" >

<p>
    Please provide us the following information so we can know more about
    you.
</p>

<?php echo $this->element->getElement( 'name' ); ?>
<?php echo $this->element->getElement( 'submit' ) ?>

</form>

Как показывает код vascowhite, когда вы находитесь внутри viewScript, переменная с формой называется element. Декоратор viewscript использует частичную визуализацию для визуализации, и, таким образом, он создает свою собственную область видимости в скрипте views с разными именами переменных.

Итак, хотя в вашем первоначальном представлении это называлось $ form, в сценарии просмотра вам нужно будет называть его элементом.

Кроме того, возможно, это была скорость копирования /вставки, но вы использовали теги <? ?> вместо <?= ?> или теги <?php ?>. Возможно, это вызвало какую-то ошибку, которая выходит за рамки синтаксического анализа, и поэтому у вас нет вывода.

ответил Jerry Saravia 10 SatEurope/Moscow2011-12-10T08:39:22+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 08:39:22 +0400 2011, 08:39:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132