我是PHP编程和Magento的新手。我想将当前的ProductId从自定义块中的表单传递给控制器(新操作)。
是的我知道一种方法是在自定义块表单中添加一个隐藏的输入(带有我的产品ID),然后通过常规方法检索Value:
$this->getRequest()->getPost('myvalue'))
Magento有没有更好的方法来检索控制器中的值而不必声明额外的秘密输入字段?
答案 0 :(得分:0)
您希望遵守Magento的最佳实践,这对您有好处!然而,将数据传递给控制器是非常标准的。如果我们查看从产品页面添加产品的方式,我们实际上会在表单操作URL的参数中看到产品ID:
http://domain.com/checkout/cart/add/uenc/uenc_value/product/45573/
...其中45573
是产品ID。当然,这也可以通过隐藏的输入字段发送到控制器,我一直在使用它。请注意,上述内容与Magento中的http://domain.com/checkout/cart/add/?uenc=uenc_value&product=45573
相同。
存储数据以供将来使用的另一种存储方法是将数据设置到会话中。为了将数据发布到控制器,我不推荐这种方法,但要注意这一点:
$session = Mage::getSingleton('core/session');
$session->setMyValue(true);
然后我们可以通过实例化会话来从my_value
检索数据。祝你好运!
答案 1 :(得分:0)
传递数据可以通过不同方式完成:
你可以使用Magento的magic setters and getters 所以你必须这样做来设置值:
Mage::getSingleton('core/session')->setSomeVariable($value);
这是为了检索它:
Mage::getSingleton('core/session')->getSomeVariable();
或者您可以使用注册表。
Mage::register('key', $value); //to set your data
Mage::registry('key'); //to get your data
答案 2 :(得分:0)
Magento提供了一种构建URL的方法,该URL具有根据配置DOM计算的必要值。块(以及块模板)可以直接调用Mage_Core_Block_Abstract::getUrl()
:
$this->getUrl('some_handle/foo/test',array('id'=>'some_value'));
// Mage::getUrl() will work as well
以上将导致以下网址:
http://base_url/frontname/foo/action/id/some_value/
...可以在FooController
testAction()
中以
$this->getRequest()->getParam('id') // 'some_value'