adminhtml/session in Magento addError重定向后未显示



我正在开发一个带有网格的自定义magento管理模块。当您添加一个新条目时,我会执行自定义验证,并使用Mage::getSingleton('adminhtml/session')->addError()方法抛出一个错误(当发生错误时)。

当我重定向回编辑表单时,我设置的错误消息不会出现。

这是我在电网控制器上的save操作:

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。有什么想法可以解决这个问题吗?

我自己也经历过这个问题,很失望这个问题没有得到任何回复

原因是您的编辑页面未配置为显示会话消息。相反,消息会一直持续到第一次显示,如果您不断尝试,甚至可能会出现同一消息的多个"副本"。

答案是确保您的控制器和布局正在输出消息。

最低要求是控制器中的以下行:

$this->loadLayout();
// other code goes here...
$this->_initLayoutMessages('adminhtml/session');  // <--- this line is key
$this->renderLayout();

如果您使用的会话不是adminhtml/session,那么请初始化这些消息。

最新更新