我正在构建一个管理模块,需要处理一个表单,但是我很难将变量发送到POST,而只是重定向到仪表板。表格如下:
<form name="notes" action="<?php echo Mage::helper("adminhtml")->getUrl("foo/index/processnotes/");?>" method="post">
<input type="hidden" name="another_form_key" value="<? echo $this->getFormKey(); ?>" />
我这样做是因为为admin启用了安全密钥。它给了我一个网址:
foo/index/processnotes/key/4745f5fbb9c168778958d5d4a4c2c0ef/
在控制器中我有:
public function processnotesAction(){
$model = Mage::getModel('foo/process');
// I am not sure how I am supposed to send $_POST values here
}
并在Package/foo/Model/Process.php
我希望能够在这里处理我的表单中的POST变量,但我看不出有什么问题,我只是被发送到仪表板。
<?php
class Package_foo_Model_Process extends Mage_Core_Model_Abstract
{
public function noteProcess() {
$test = $_POST['myValue'];
echo $test;
}
}
在阅读完答案之后,我想补充一点我的真实代码在做什么,以及我如何使用$ _POST。我正在设置一个简单的例子,只是让表格发布,但意识到我在Magento可能有很多错误。
$query="INSERT INTO `notes_value` ( `color`, `the_id`, `the_value` ) VALUES ";
$sku = $_POST['color'];
array_pop($_POST);
foreach ($_POST AS $key => $value) {
$values[] = "('$sku', '$id', '$value')";
}
$query .= implode(', ', $values) . ';';
梦想是我可以$resource->getConnection('core_write');
将其实际插入到数据库中,但对目前的情况感觉不那么乐观。
答案 0 :(得分:9)
通常当您被重定向到仪表板时,因为您的密钥无法识别。我通常会使用以下语法
<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
此外,我倾向于禁用管理员密钥以验证这是否是您的问题。
接下来,永远不会使用Magento $_POST
,所有变量都可以访问(干净且安全)。 POST信息可以全局访问(不仅仅是在控制器中),但您仍然可以从控制器中设置模型中的变量,如下所示:
public function processnotesAction(){
$model = Mage::getSingleton('foo/process');
$model->setData('postdata', $this->getRequest()->getPost() );
}
然后使用以下方法从模型中访问它们:
$this->getData();
$this->getMyPostedField();
或者您可以在模型中使用它
Mage::app()->getRequest()->getPost();
Mage::app()->getRequest()->getParam('myargument');
getPost
也可以使用参数来获取单个POST值 - 但它不会获得GET值。 getParam
将同时返回GET和POST值。
答案 1 :(得分:3)
可以通过请求对象Mage_Core_Controller_Request_Http
访问请求参数。用法示例:
$request = $this->getRequest();
$params = $request->getParams();
$someParam = $request->getParam('param_key');
// or $params = $request->getPost();
然后,您需要在模型上设置数据并致电$model->save()
。
答案 2 :(得分:0)
如果您的控制器扩展了ActionController,那么preDispatch()函数负责将您重定向到仪表板(并检查有效的表单密钥..)。
我建议你把Mage :: log调试信息放到ActionController的preDispatch函数中,这可能有助于识别发生了什么?
我要发表评论,但声誉不够高。
(也许更新您的帖子或评论帮助您的答案,看看您是如何解决的)(<或p>)