我正在构建一个管理模块,需要处理一个表单,但在将变量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(); ?>" />
我这样做是因为安全密钥是为管理员打开的。它给了我一个url,比如:
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的内容。我设置了一个简单的例子来发布表格,但我意识到在马根托可能有很多事情我做错了。
$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');
将其实际插入数据库,但对目前的进展感到不那么乐观。
通常当您的键无法识别而被重定向到仪表板时。我通常会使用以下语法
<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
此外,我倾向于禁用管理密钥来验证这是否是您的问题。
接下来,永远不要将$_POST
与Magento一起使用,所有变量都可以访问(干净安全)。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值。CCD_ 5将返回类似的GET和POST值。
Mage_Core_Controller_Request_Http
访问。示例用法:
$request = $this->getRequest();
$params = $request->getParams();
$someParam = $request->getParam('param_key');
// or $params = $request->getPost();
然后,您需要在模型上设置数据并调用$model->save()
。
如果您的控制器扩展了ActionController,那么preDispatch()函数将负责将您重定向到仪表板(并检查有效的表单键..)。
我建议您将Mage::log调试信息放入ActionController的preDispatch函数中,这可能有助于确定发生了什么?
我本来打算发表评论的,但我的声誉不够高。
(可能会更新你的帖子或对帮助你的答案发表评论,看看你是如何解决的(或是否))