我有DataObject
Confirmation
,如下所示:
<?php
class Confirmation extends DataObject
{
private static $db = array(
'Reimbursement' => 'Money',
'SomeText' => 'Varchar(255)'
);
private static $has_one = array(
'Page' => 'Page'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
$reimbursementField = MoneyField::create('Reimbursement');
$someTextField = TextField::create('SomeText');
$reimbursementField->setAllowedCurrencies(array('SEK'));
$fields->addFieldsToTab(
'Root.Main',
array(
$reimbursementField,
$someTextField
)
);
return $fields;
}
public function onBeforeWrite()
{
parent::onBeforeWrite();
if($this->isChanged('Reimbursement')) SS_Log::log( print_r ( 'changed', true ), SS_Log::WARN );
}
}
if($this->isChanged('Reimbursement'))
函数中的 onBeforeWrite()
将始终评估为true
。无论改变什么。即使保存而不进行任何更改 - 它也会触发日志功能。
编辑:在SS_Backtrace::backtrace()
Money.php
函数中使用setValue()
检查堆栈跟踪我发现每次保存Confirmation
DataObject
时,调用setValue()
时不会将$markChanged
参数设置为false DataObject.php line 1281
,导致$isChanged
标记设置为true
,并且字段始终表现为DataObject
好像它已经改变了。
在记录getChangedFields()
&#39; before
功能时,我会得到以下输出(保存时不做任何更改)。注意Reimbursement字段存在,[22-Mar-2016 16:28:07] Warning at framework/model/DataObject.php line 2597: Array
(
[Reimbursement] => Array
(
[before] =>
[after] => Money Object
(
[currency:protected] => SEK
[amount:protected] => 25000
[isChanged:protected] => 1
[locale:protected] =>
[currencyLib:protected] => Zend_Currency Object
(
[_options:protected] => Array
(
[position] => 8
[script] =>
[format] =>
[display] => 2
[precision] => 2
[name] => svensk krona
[currency] => SEK
[symbol] => kr
[locale] => sv_SE
[value] => 0
[service] =>
[tag] => Zend_Locale
)
)
[allowedCurrencies:protected] =>
[value:protected] =>
[tableName:protected] =>
[name:protected] => Reimbursement
[arrayValue:protected] =>
[defaultVal:protected] =>
[failover:protected] =>
[customisedObject:protected] =>
[objCache:ViewableData:private] => Array
(
)
[class] => Money
[extension_instances:protected] => Array
(
)
[beforeExtendCallbacks:protected] => Array
(
)
[afterExtendCallbacks:protected] => Array
(
)
)
[level] => 2
)
)
为空。我在这里缺少什么?
X1 := $(shell date)
X2 := $(shell cat Makefile)
X3 := $(shell dir p*)
X4 := $(shell ls p*)
example_1:
@echo $(X1)
example_2:
@echo $(X2)
example_3:
@echo $(X3)
example_4:
@echo $(X4)