_重定向仍然继续执行php代码

_重定向仍然继续执行php代码,php,magento,Php,Magento,我正在处理自定义模块,在我的IndexController.php中,我编写了这个函数来将用户添加到数据库中 public function addAction() { if($this->getRequest()->getParam('name', '') == ''){ $this->_redirect('etech/user'); //die; or exit; } $form = $this->getRequ

我正在处理自定义模块,在我的
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/
直接访问此url。为此,我检查了
if($this->getRequest()->getParam('name','')==''{}
。重定向工作正常,只是其中的代码一直在执行,用户看到一条不应该看到的成功消息。为此,我使用老式的
exit
die
停止执行代码,然后它甚至不会重定向


magento的处理方法是什么?另外,当我使用
getRequest()->getParams()
时,它在
get
post
中返回这两个参数。只获取
post
parametrs没有任何出路吗?

使用
$this->\u redirect()
是正确的,但您必须使用
return
,最好是
return$this。您也可以使用
exit
die
,就像您一直在做的那样,但我相信您知道,在重定向您之前,最好让Magento做它想做的事情

只要在
$this->\u redirect()
之后立即返回
,就不会有任何问题

Edit:至于请求参数问题,我认为您可以调用类似
$this->getRequest()->getPostData()
(这是错误的)。一般惯例是使用
getParams()
,不管数据是通过GET还是POST发送的,因为从技术上讲,您的代码不应该关心这一点

编辑#2: 如果一般惯例不适用,您迫切需要基于POST和GET限制对页面的访问,这里有一个来自Mohammad的方便片段:

公共函数addAction()
{
如果($this->getRequest()->isPost()){
//回音“post”;做你的事情
}否则{
//回音“get”;重定向
}
}

通常建议在重定向后使用
die
exit
,但是,如果在重定向后停止脚本时重定向不起作用,那么问题可能出在其他地方。我的意思是,“我不确定这是否准确。”:-)你说得对。没有这样的方法
getPostData()
。所以它不会起作用。我需要在
$\u POST
中手动检查它。为什么
退出
模具
不在那里工作?有什么想法吗?我认为
$this->\u redirect()
不会立即调用
标题('Location:…')
,因此如果您立即退出,那么Magento就没有机会完全准备重定向。