在表单提交后将数据从控制器传递到模板的最佳方式


Best way to pass data from controller to template after form submit

我创建了一个简单的模块,叫做产品选择器。我使用Magento collection来检索和过滤特定的产品。用作过滤器的数据将来自表单post操作。到目前为止,这是我所做的。

我的控制器

public function indexAction() {
        $this->loadLayout();
        $data['ta'] = $this->getRequest()->getPost('torque-action');
        $data['tr'] = $this->getRequest()->getPost('torque-required');
        $data['tm'] = $this->getRequest()->getPost('torque-metric');
        $this->renderLayout();
    }

我的php文件

$attr_name = 'product_classification';
$attr_val = $form_data1; //example data only
$metric = $form_data2; //example data only
$metric_val_max = $form_data3; //example data only
$metric_val_min = 1000;
$collection = Mage::getModel('catalog/product')
                ->getCollection()
                ->addFieldTofilter($attr_name, array(
                    'eq' => Mage::getResourceModel('catalog/product')
                                    ->getAttribute($attr_name)
                                    ->getSource()
                                    ->getOptionId($attr_val)
                    ))
                ->addFieldTofilter($metric, array('lteq' => $metric_val_max))
                ->addFieldTofilter($metric, array('gteq' => $metric_val_min))
                ->addAttributeToSelect('*')
                ->load();

我的问题是,我不能传递数据从控制器到php模板。

我尝试使用Mage::getSingleton('core/session')

Mage::getSingleton('core/session')->setSomeSessionVar($data);// In the Controller
$data = Mage::getSingleton('core/session')->getSomeSessionVar(); // In the View;

我使用core/session成功检索数据,然而,当我试图将其放在集合上时,它变为空白。$form_data1 = echo $data['ta'];

我也使用Magento注册表,但没有运气。

Mage::register('some_name', $data); //set on controller
$my_var = Mage::registry('some_name'); //Fetch on View

我成功地获得了post表单数据到控制器。我还成功地通过Magento collection使用固定值获取特定数据。

问题:

如何将数据从控制器传递到html模板?最好的方法是什么?我要创建一个block类吗?

提前感谢。

这些是我的推荐信http://alanstorm.com/magento_registry_singleton_tutorialhttps://magento.stackexchange.com/questions/7493/send-data-from-the-controller-to-phtml

太棒了!

将数据从控制器传递到任何块或php的方法之一是使用Magento寄存器。

控制器:使用Mage::register('任意字符串名称',$data)设置或注册数据

public function indexAction() {
        $this->loadLayout();
        $data['ta'] = $this->getRequest()->getPost('torque-action');
        $data['tr'] = $this->getRequest()->getPost('torque-required');
        $data['tm'] = $this->getRequest()->getPost('torque-metric');
        Mage::register('t1', $data['ta']);
        Mage::register('t2', $data['tr']);
        Mage::register('t3', $data['tm']);
        $this->renderLayout();
    }

php:使用Mage::registry('your string name')获取注册数据

$_ta = Mage::registry('t1'); //torque action
$_tr_max = Mage::registry('t2'); //torque required
$_tm = Mage::registry('t3'); //torque metric

注意:这实际上很容易使用,只是要注意你的拼写错误。

谢谢!