我正在研究自定义模块,在我的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', '') == ''){}
。重定向工作正常,除了那里的代码一直在执行,用户看到一个不应该看到的成功消息。为此,我使用旧式exit
或die
来停止执行代码,然后它甚至没有重定向。
magento
处理它的方法是什么?此外,当我使用getRequest()->getParams()
时,它会在get
或post
中返回两个参数。是不是只能获得post
个参数?
答案 0 :(得分:1)
使用$this->_redirect()
是正确的,但您必须使用return
(理想情况下为return $this;
)进行跟进。您可能也使用exit
或die
,正如您一直在做的那样,但我确信您知道让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
}
}