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

时间:2015-09-15 02:50:01

标签: php magento session

我创建了一个名为product selector的简单模块。我使用Magento集合来检索和过滤特定产品。要用作过滤器的数据将来自表单后置操作。到目前为止,这是我到目前为止所做的。

我的控制器

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();
    }

我的phtml文件

$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();

我的问题是,我无法将数据从控制器传递到phtml模板。

我尝试使用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

我成功地将表单数据发送到控制器。我还使用固定值通过Magento集合成功获取特定数据。

问题:

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

提前致谢。

这些是我的参考资料 http://alanstorm.com/magento_registry_singleton_tutorial https://magento.stackexchange.com/questions/7493/send-data-from-the-controller-to-phtml

1 个答案:

答案 0 :(得分:0)

真棒!

将数据从控制器传递到任何块或phtml的方法之一是使用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();
    }

Phtml:使用Mage :: registry('你的字符串名')获取注册数据

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

注意:这实际上很简单,只要小心你的拼写错误。

谢谢!