_redirect仍然继续执行php代码

时间:2014-01-20 07:22:37

标签: php magento

我正在研究自定义模块,在我的IndexController.php我写了这个函数来将用户添加到数据库

public function addAction() {
    if($this->getRequest()->getParam('name', '') == ''){
        $this->_redirect('etech/user');
        //die; or exit;
    }
    $form = $this->getRequest()->getParams();
    $user = Mage::getModel('test/test');
    foreach ($form as $key => $val){
        $user->setData($key, $val);
    }
    try{
        $user->save();
    }catch(Exception $e){
        print_r($e);
    }
    $this->_redirect('etech/user', array('msg'=>'success'));
}

我想阻止用户直接以www.example.com/index.php/etech/user/add/的形式访问此网址。为此,我做了一张支票if($this->getRequest()->getParam('name', '') == ''){}。重定向工作正常,除了那里的代码一直在执行,用户看到一个不应该看到的成功消息。为此,我使用旧式exitdie来停止执行代码,然后它甚至没有重定向。

magento处理它的方法是什么?此外,当我使用getRequest()->getParams()时,它会在getpost中返回两个参数。是不是只能获得post个参数?

1 个答案:

答案 0 :(得分:1)

使用$this->_redirect()是正确的,但您必须使用return(理想情况下为return $this;)进行跟进。您可能也使用exitdie,正如您一直在做的那样,但我确信您知道让Magento做任何想做的事都会更好在重定向之前。

只要您return之后立即$this->_redirect(),就不会有任何问题。

编辑:至于请求参数问题,认为你可以调用类似$this->getRequest()->getPostData() 的东西(这是假的) )。一般惯例是使用getParams(),无论数据是通过GET还是POST发送的,因为从技术上讲,您的代码不应该关注这一点。

编辑#2: 如果一般惯例不适用,并且你迫切需要根据POST与GET限制对页面的访问,这里是Mohammad的一个方便的片段:

public function addAction()
{
    if ($this->getRequest()->isPost()) {
        // echo 'post'; do your stuff
    } else {
        // echo 'get'; redirect
    }
}