Magento Mage::dispatchEvent重置旧值

Magento Mage::dispatchEvent重置旧值,magento,Magento,我正在使用“管理员权限角色准备保存”事件更新角色详细信息。更新正在进行中。新值已存储。但在更新之后,rolecontrollers saveRoleAction的分派事件将恢复为旧值 Mage::dispatchEvent( 'admin_permissions_role_prepare_save', array('object' => $role, 'request' => $this->getRequest()

我正在使用“管理员权限角色准备保存”事件更新角色详细信息。更新正在进行中。新值已存储。但在更新之后,rolecontrollers saveRoleAction的分派事件将恢复为旧值

Mage::dispatchEvent(
                'admin_permissions_role_prepare_save',
                array('object' => $role, 'request' => $this->getRequest())
            );
此请求数据具有旧值。如何更新请求数据以获得新值

编辑: 这是我的观察员

public function saveStoreInformation($observer) { 
        $role_id =  Mage::app()->getRequest()->getPost('role_id');
        $store_ids_array = Mage::app()->getRequest()->getPost('gws_store_groups');
        $store_ids = implode(',',$store_ids_array);
        if(in_array(0,$store_ids_array))
        { $gws_is_all = 1; } else {$gws_is_all = 0;}
        //$model = Mage::getModel('admin/role');

        if($role_id) {
            $data = array('gws_is_all'=>$gws_is_all,'gws_store_groups'=>"$store_ids");
            $model = Mage::getModel('admin/role')->setData($data);
            try {
                    $model->setId($role_id)
                          ->save();
                    echo "Data updated successfully.";
                } catch (Exception $e){
                    echo $e->getMessage();
            }        
        } 
    }

您没有按预期使用观察者。您应该做的是更改提供的对象:

$observer->getObject()->setData(...);
这将导致以下过程:

  • 使用参数
    $role
  • 您可以在观察者中更改
    $role
  • $role
    已保存
鉴于您当前的解决方案具有以下功能:

  • 使用参数
    $role
  • 忽略参数,自己加载角色并保存它
  • 未更改的
    $role
    对象将被保存并覆盖您自己的更改

您未按预期使用观察员。您应该做的是更改提供的对象:

$observer->getObject()->setData(...);
这将导致以下过程:

  • 使用参数
    $role
  • 您可以在观察者中更改
    $role
  • $role
    已保存
鉴于您当前的解决方案具有以下功能:

  • 使用参数
    $role
  • 忽略参数,自己加载角色并保存它
  • 未更改的
    $role
    对象将被保存并覆盖您自己的更改
为什么您要自己发送此活动?或者,如果没有,您实际的观察者代码是什么?为什么您自己发送此事件?或者如果不是,您的实际观察者代码是什么?