1

「admin_permissions_role_prepare_save」イベントを使用して役割の詳細を更新しています。更新が行われています。新しい値が保存されました。ただし、更新後、rolecontrollerssaveRoleActionのディスパッチイベントは古い値に復元されます。

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();
            }        
        } 
    }
4

1 に答える 1

1

意図したとおりにオブザーバーを使用していません。あなたがすべきことは、提供されたオブジェクトを変更することです:

$observer->getObject()->setData(...);

これにより、次のプロセスが発生します。

  • イベントはパラメータでディスパッチされます$role
  • $roleオブザーバーを変更します
  • $role保存されます

一方、現在のソリューションは次のことを行います。

  • イベントはパラメータでディスパッチされます$role
  • パラメータを無視し、自分でロールをロードして保存します
  • 変更さ れていない$roleオブジェクトが保存され、独自の変更が上書きされます
于 2013-02-01T09:31:20.920 に答える