我对 PHP 编程和 Magento 还是很陌生。我想将当前 ProductId 从自定义块中的表单传递给控制器(新操作)。
是的,我知道一种方法是在自定义块表单中添加一个隐藏的输入(使用我的产品 ID),然后通过常规检索值:
$this->getRequest()->getPost('myvalue'))
Magento 是否有更好的方法来检索控制器中的值而无需声明额外的秘密输入字段?
我对 PHP 编程和 Magento 还是很陌生。我想将当前 ProductId 从自定义块中的表单传递给控制器(新操作)。
是的,我知道一种方法是在自定义块表单中添加一个隐藏的输入(使用我的产品 ID),然后通过常规检索值:
$this->getRequest()->getPost('myvalue'))
Magento 是否有更好的方法来检索控制器中的值而无需声明额外的秘密输入字段?
对您希望在 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
然后,我们可以稍后通过实例化会话来检索数据。祝你好运!
Magento 提供了一种方法来构造具有必要值的 URL,根据配置 DOM 计算。块(以及块模板)可以Mage_Core_Block_Abstract::getUrl()
直接调用:
$this->getUrl('some_handle/foo/test',array('id'=>'some_value'));
// Mage::getUrl() will work as well
以上将导致以下 URL:
http://base_url/frontname/foo/action/id/some_value/
...可以在FooController
testAction()
as中读取
$this->getRequest()->getParam('id') // 'some_value'
可以通过不同的方式传递您的数据:
您可以使用 Magento 的魔法 setter 和 getter。
所以你必须这样做来设置值:
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