在magento管理模块中使用控制器和模型提交表单值


Submit form values using controller and model in magento admin module

我正在构建一个管理模块,需要处理一个表单,但在将变量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函数中,这可能有助于确定发生了什么?

我本来打算发表评论的,但我的声誉不够高。

(可能会更新你的帖子或对帮助你的答案发表评论,看看你是如何解决的(或是否))