Zend flash messenger

时间:2013-02-01 17:42:44

标签: php zend-framework flash-message

我有一个表单,提交按钮检查是真还是假。

如果真的重定向到另一个页面。

如果错误保留在同一页面上并打印错误消息。

错误消息是使用flash messenger打印出来的。 但是,在某些情况下,当提交为false时,它不会在第一次尝试时打印,它总是在第二次点击时打印出来。

我做错了什么吗? 而且,有没有办法设置差异闪光信使名称?因为,在我的其他具有flash messenger的页面上,在刷新页面时打印出错误。

以下是代码:

if(isset($_POST['submit'])) {
    // code to inputfields

    if(true) {
        //redirect to some page
    } else {
        // print the flash error on the same page
        $this->_helper->flashMessenger->addMessage(" This email is already taken");
        $this->view->messages = $this->_helper->flashMessenger->getMessages();
    }
}

HTML:

<center>
            <div style="color:red">
            <?php if (count($this->messages)) : ?>
                <?php foreach ($this->messages as $message) : ?>
                <div id="field_name">
                <strong style="text-transform:capitalize;">Email </strong>
                    - <?php echo $this->escape($message); ?>
                </div>
                <?php endforeach; ?>
            <?php endif; ?>
            </div>
        </center>

1 个答案:

答案 0 :(得分:9)

flashmessenger实际上设计用于某种重定向,因此您看到的任何消息都可能来自先前操作的执行。在第一个“帖子”中,您当前的代码不会闪烁任何消息。

如果你尝试这样的话,你可能会有运气:

public function init()
{
    //This will catch any messege set in any action in this controller and send
    //it to the view on the next request.
    if ($this->_helper->FlashMessenger->hasMessages()) {
        $this->view->messages = $this->_helper->FlashMessenger->getMessages();
    }
}

public function someAction()
{
    if(isset($_POST['submit'])) {
    // code to inputfields
        if(true) {
        //redirect to some page
        } else {
            // print the flash error on the same page
            $this->_helper->flashMessenger->addMessage(" This email is already taken");
            //will redirect back to original url. May help, may not
            $this->_redirect($this->getRequest()->getRequestUri());
        }
    }
}

这是我编写的一个动作,用于演示您似乎在尝试的内容。

public function updatetrackAction()
    {
        //get the page number
        $session = new Zend_Session_Namespace('page');
        $id = $this->getRequest()->getParam('id');
        //get the entity object
        $model = new Music_Model_Mapper_Track();
        $track = $model->findById($id);
        //get the form
        $form = new Admin_Form_Track();
        $form->setAction('/admin/music/updatetrack/');
        //test for 'post' 'valid' and update info
        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {
                $data = $form->getValues();

                $newTrack = new Music_Model_Track($data);

                $update = $model->saveTrack($newTrack);
                //add message
                $this->message->addMessage("Update of track '$update->title' complete!");
                //redirects back to the same page number the request came from
                $this->getHelper('Redirector')->gotoSimple('update', null, null, array('page' => $session->page));
            }
        } else {
            //if not post display current information
            //populate() only accepts an array - no objects -
            $form->populate($track->toArray());
            $this->view->form = $form;
        }
    }
相关问题