Magento backend_model在加载时不会触发并保存

时间:2014-03-14 23:07:03

标签: php magento phpunit

这是一个奇怪的情况,因为magento正在加载我的后端模型,它只是在我加载并保存它时没有调用它。我知道这是因为1.我在我的数据库中看到它,2。当我重命名我的后端模型时,我的测试用例失败了。这是我的代码

它保存我的值很好,完全忽略了我的afterload和beforesave方法。

TEST CASE

<?php

class Super_Base_Test_Controller_Test extends  EcomDev_PHPUnit_Test_Case_Controller {

    const DEFAULTSTORE = 1;

    public function setUpMocks() {
        $this->setCurrentStore(1);
        $customer = Mage::getSingleton('customer/customer')
            ->load(1);
        $customer->setCoinBalance(20)
            ->save();
    }


    public function setUp() {
        $this->setUpMocks();
        $data = array(
            'customer_id'=>1,
            'message'=>'this is a test message',
            'income'=>20,
            'created_at'=>'9/11/84',
            'updated_at'=>'9/11/84',
            'current'=>1
        );
        $this->getRequest()->setParams($data);
    }

    protected function getTearDownOperation() {
        return PHPUnit_Extensions_Database_Operation_Factory::TRUNCATE();
    }

}

后端模型

<?php
/**
 * Created by PhpStorm.
 * User: numerical25
 * Date: 3/8/14
 * Time: 6:22 PM
 */


class Super_Coin_Model_Customer_Attribute_Coinbalance extends Mage_Eav_Model_Entity_Attribute_Backend_Abstract {
    protected function _afterLoad()
    {
        if (!is_array($this->getValue())) {
            $value = $this->getValue();
            $this->setValue(empty($value) ? false : unserialize($value));
        }
    }

    protected function _beforeSave() {
        if (is_array($this->getValue())) {
            $this->setValue(serialize($this->getValue()));
        }
    }

    public function setCoinAmount($amount) {
        $this->setValue($amount);
    }
}

安装文件

$eavsetup->addAttribute('customer', 'coin_balance', array(
    'input'         => 'text',
    'type'          => 'decimal',
    'label'         => 'Customer Coin Balance',
    'backend' => 'coin/customer_attribute_coinbalance',
    'global'       => 1,
    'visible'       => 1,
    'required'      => 0,
    'user_defined' => 1, ));

当我设置断点时,系统会完全忽略我的方法。

1 个答案:

答案 0 :(得分:0)

查看抽象类Mage_Eav_Model_Entity_Attribute_Backend_Abstract。它包含以下公共方法:beforeSave()和afterLoad()。

该类

中没有_afterLoad()和_beforeSave()方法