2009-06-26 2 views
2

У меня есть кнопка входа в заголовок веб-сайта. HTML-код этого заголовка запрограммирован в представлении/макетах/home.phtml структуры Zend.Общий код Zend для всех контроллеров

У меня есть скрытая форма в этом макете, которая запускается интегрированной интеграцией содержимого в формате jQuery thickbox. Причина. Я не хочу, чтобы сделать ajax-вызов, чтобы просто получить небольшую форму входа.

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

Я не знаю, подходит ли место для загрузки, или я должен делать это в другом месте.

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

ответ

1

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

public function routeStartup(Zend_Controller_Request_Abstract $request) { } 

сформировал форму внутри вышеупомянутого метода и установил форму в объекте $ view.

$ просмотр можно retrived с помощью:

$view = Zend_Layout :: getMvcInstance()->getView(); 
2

Создайте свой собственный базовый контроллер, который расширяет Zend_Controller_Action затем контроллеры простираться от вашего базового контроллера. Я не знаю, что такое интеграция содержимого встроенного контента jQuery толстой страницы, но у вас есть несколько разделов, которые вы можете поместить в зависимости от того, когда вам нужен ваш код для запуска. Init(), preDispatch(), postDispatch() и т.д ... Просто убедитесь, что когда вы расширяете свой базовый контроллер, который вы sthing как:

родительском :: Init() родительскую :: preDispatch() родитель :: postDispatch() и т. д. внутри каждого раздела, так что базовый код работает также ...

2

Будьте осторожны о решении Прадипом Шармы (ответ он написал сам и принят ниже).

Весь код ниже код для ZF 1,12, а не 2,0 ZF

В загрузчике, экземпляр MVC Zend_Layout в, возможно, не были созданы еще. Вы должны использовать Zend_Layout::startMvc() вместо:

$view = Zend_Layout::startMvc()->getView() ; 

И ТБЙ Я предпочитаю выполнение этого кода в функции preDispatch(). Новые пользователи ZF могут быть заинтересованы в этом:

приложение/плагины/HeaderForm.php:

class Application_Plugin_HeaderForm extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    {  
     $view = Zend_Layout::startMvc()->getView() ; 
     $view->headerForm = new Application_Form_HeaderForm() ; 
    } 
} 

Вызов нового Application_Form_HeaderForm() воли автозагрузку по умолчанию в приложения/формы/ папки. Вы также можете создать форму непосредственно в плагине с new Zend_Form() и addElement() и т. Д., Но она не будет использоваться повторно.

Конечно, вам необходимо зарегистрировать этот плагин в своем бутстрапе!

применения/Bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initPlugin() 
    { 
     $front = Zend_Controller_Front::getInstance() ; 
     $front->registerPlugin(new Application_Plugin_HeaderForm()) ; 
    } 
} 

Вызов новой Application_Plugin_HeaderForm() воли автозагрузки по умолчанию в приложении/плагин/ папку

 Смежные вопросы

  • Нет связанных вопросов^_^