2014-05-12 3 views
0

У меня есть небольшая форма, где пользователь может подписаться на мой информационный бюллетень. Как я могу передать адрес электронной почты с моего макета на мой контроллер?Zend FrameWork - ввод формы от макета к контроллеру

имя

Мой Макет Footer.phtml, вот код:

<div id="subscribe"> 

<form name="newsletterRegister" method="post" action=""> 
<span>Subscribe to the Newsletter</span> 
<input class="subscribeNewsletter" name="email" type="text"> 
<input id="subscribe_ok" type="image" src="/www/assets/newImages/footer/Ok.png" value=""> 
</form> 

</div> 

У меня есть контроллер с именем NewsletterController.php

Я вроде потерял с Zend Framework, может кто-нибудь помочь мне выяснить, что мне нужно сделать??

ответ

3

Ну это изменить

<form name="newsletterRegister" method="post" action=""> 

Для этого

<form name="newsletterRegister" method="post" action="NewsletterController/YOURACTION"> 

И в контроллере только получить данные, как этот

$request = $this->getRequest(); 
$request->getPost() 
0

, если действия вашей формы пуст , он будет публиковать для себя.

Но, возможно, вы не хотите проверять каждую страницу, если рассылка отправляется.

Попробуйте использовать Controller Plugin, проверить объект запроса для поля ввода, назовите его уникальным, как email_newsletter, если не пусто, делать свою логику.

Файл: приложение/плагины/Newsletter.php

class Application_Plugin_Newsletter extends Zend_Controller_Plugin_Abstract { 

    //before dispatching starts 
    public function preDispatch(Zend_Controller_Request_Abstract $request) { 
     $email = $request->getParam('email_newsletter',NULL); 
     if(!is_null($mail)) { 
      //check if is valid 
      if(Zend_Validate::is($email,'')) { 
       //do your logic 
      } 
      else { 
       //set some error messages 
       //maybe use helper flashMessenger 
      } 
     } 
    } 
} 

Файл: Bootrap.php

protected function _initPlugins() { 
    $this->bootstrap('frontController'); 

    //Get FrontController Instance 
    $frontController = $this->getResource('frontController'); 

    $frontController->registerPlugin(new Application_Plugin_Newsletter()); 

    return $frontController; 
} 

ИЛИ

Установить действие формы, как «/ бюллетень/подписаться. Затем в контроле «информационный бюллетень» действие «подписаться» проверяет форму и перенаправляет на страницу отправки.

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

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