我正在开发一个带有网格的自定义 magento 管理模块。当您添加新条目时,我使用 Mage::getSingleton('adminhtml/session')->addError()
执行自定义验证并抛出错误(如果发生)方法。
当我重定向回编辑表单时,我设置的错误消息没有出现。
这是我的save
对网格 Controller 的操作:
public function saveAction()
{
// Look For HTTP Post
if ($data = $this->getRequest()->getPost())
{
// Load Data
$manualOrderSyncModel = Mage::getModel('mycompany_mymodule/manualordersync')
->setData($data)
->setId($this->getRequest()->getParam('id'));
// Anticipate Errors
try
{
// Get If Order Number Is Valid
$order = Mage::getModel('sales/order')->load($manualOrderSyncModel->getOrderNumber(), 'increment_id');
if (null === $order->getId())
throw new Exception('No such order exists in the system. Check that order number.');
// Check If This Order Already Exists In Queue
$existingManualOrderSyncModel = Mage::getModel('mycompany_mymodule/manualordersync')
->load($manualOrderSyncModel->getOrderNumber(), 'order_number');
if (null !== $existingManualOrderSyncModel->getId())
{
// Update Existing Entry
$existingManualOrderSyncModel
->setCreatedAt(now())
->setCreatedBy(Mage::getSingleton('admin/session')->getUser()->getUsername())
->setIsSynced(Mycompany_Mymodule_Model_Yesno::NO)
->save();
}
else
{
// Update Timestamps
if ($manualOrderSyncModel->getCreatedAt() == NULL) {
$manualOrderSyncModel
->setCreatedAt(now())
->setCreatedBy(Mage::getSingleton('admin/session')->getUser()->getUsername());
}
$manualOrderSyncModel->save();
}
// Set Success
Mage::getSingleton('adminhtml/session')->addSuccess($this->__('Manual order sync updated.'));
Mage::getSingleton('adminhtml/session')->setManualordersyncData(false);
// Handle Redirect
$this->_redirect('*/*/');
return;
}
catch (Exception $e)
{
// Error
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setManualordersyncData($data);
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
}
}
// Error
Mage::getSingleton('adminhtml/session')->addError($this->__('Invalid request - unable to find manual order sync to save.'));
$this->_redirect('*/*/');
}
我注意到,仅当我这样做时才会出现此问题:
// Error
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setManualordersyncData($data);
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
但是,如果像这样设置错误并重定向回网格,则错误消息显示:
// Error
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setManualordersyncData($data);
$this->_redirect('*/*/');
return;
这并不理想,因为我不再处于编辑表单中并且丢失了
old data
从表格。有想法该怎么解决这个吗?
最佳答案
自己亲身经历过这个问题,令人失望的是这个问题没有收到任何回复
关于error-handling - Magento addError中的adminhtml/session在重定向后未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624093/