Zend FrameWork - 从布局到控制器的表单输入

时间:2014-05-12 15:50:14

标签: php forms 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,有谁能帮我搞清楚我要做什么?

2 个答案:

答案 0 :(得分:3)

好好改变这个

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

到此

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

在您的控制器中只需获取此类数据

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

答案 1 :(得分:0)

如果表单的操作为空,则会自行发布。

但是如果发送新闻通讯,也许你不想查看每一页。

尝试使用控制器插件,检查输入字段的请求对象,将其命名为唯一,如 email_newsletter ,如果不为空,请执行您的逻辑。

文件:application / plugins / 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;
}

设置类似'/ newsletter / subscribe'的表单操作。 然后在控制器'newsletter'动作'订阅'中检查表单并重定向到发送页面。

也许您应该像访问会话的最后一页一样存储,或者在该新闻稿表单中添加隐藏的输入,表示在完成新闻通讯订阅后您想要重定向的当前页面。