按照官方 SS 扩展指南,DataObject
我遇到了这个异常:
PHP 通知:未定义索引:PrezzoIva
DataObject
项目全景:在主write()
执行之前,必须计算一个值并与其他属性成对保存。这是情况(在 SS 4.0.3 上):
[...]
/**
* Classe Prodotto
*/
class Prodotto extends DataObject
{
// Dichiarazione Proprietà
private static $db = [
[...]
'PrezzoIva' => 'Currency',
[...]
onBeforeWrite
方法:
/**
* Metodo gestione azioni salvataggio
* Calcolo automatico prezzo lordo e scontato
* Setter
* @return void
*/
public function onBeforeWrite()
{
// Controllo Record
if (!$this->isInDb()) {
$this->setPrezzoIva();
[...]
}
if (!$this->record['PrezzoIva']) { // <--- This is the line involved
$this->setPrezzoIva();
}
[...]
parent::onBeforeWrite();
}
上面调用的方法:
/**
* Metodo calcolo prezzo lordo IVA
* Setter
* @return void
*/
public function setPrezzoIva()
{
// Controllo IVA
if (empty($this->PrezzoIva)) {
$prezzoIva = ($this->PrezzoUnitario * $this->Iva) + $this->PrezzoUnitario;
// Salvataggio IVA
$this->PrezzoIva = $prezzoIva;
}
}
要么更改if (!$this->record['PrezzoIva'])
为if (!isset($this->record['PrezzoIva']))
异常,要么仍然抛出。
提前感谢您的支持。
更新
似乎通过将控件嵌套在里面onBeforeWrite
显然可以解决问题,但这不符合业务逻辑。在第一次尝试时onBeforeWrite
,系统看不到任何内容$this->record['PrezzoIva']
然后失败。另一方面,如果控件与 嵌套elseif
,以防其他记录丢失,这些将被忽略。目前我仍在努力。write()
同时,我注意到所涉及的字段在调用时也没有被初始化。这只发生在$this->PrezzoIva
. 其他字段被正确保存。这里有一个例子: