Zend Framework: Zend_Form в макете - PullRequest
0 голосов
/ 15 ноября 2010

Как добавить Zend_Form в свой макет? В макете нет «контроллера», в котором можно инициировать форму. Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

В ответ на комментарий Фила Брауна:

class My_View_Helper_AddMyForm extend Zend_View_Helper_Abstract()
{
    public function addMyForm() {
        return new My_Form_MyForm();
    }

}

Теперь в вашем макете:

echo $this->addMyForm();

Я не проверял его, но он должен работать, если вы зарегистрировали My / ViewПомощник, путь помощника.Меньше кода, и вы звоните только тогда, когда вам это нужно.

1 голос
/ 16 ноября 2010

Вы можете добавить форму в макет с помощью помощников действий.
Таким образом, ваш помощник действий должен выглядеть следующим образом:

class Application_Controller_Helper_AddMyForm extends Zend_Controller_Action_Helper_Abstract
{
    public function preDispatch()
    {
        $view = $this->getActionController()->view;
        $form = new Application_Form_MyForm();        
        $view->myForm = $form;
    }
}

И этот помощник должен быть зарегистрирован в Bootstrap:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initMyActionHelpers()
    {
        $this->bootstrap('frontController');
        $addMyForm = Zend_Controller_Action_HelperBroker::getStaticHelper('AddMyForm');
        Zend_Controller_Action_HelperBroker::addHelper($addMyForm);
    }
}

Теперь вы сможете получить доступ к myForm из макета:

echo $this->myForm;

Подробнее о реализации многократно используемых виджетов с помощниками действий см. В блог Вейера О'Пинни и Блог Роба Аллена

...