【发布时间】:2018-04-18 11:09:16
【问题描述】:
在DataObject 扩展上的official SS guide 之后,我正在发生此异常:
PHP 注意:未定义索引:PrezzoIva
项目全景:在主要的write() 执行之前,必须与其他DataObject 属性配对计算并保存一个值。
情况如下(在 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 上。其他字段被正确保存。举个例子:
【问题讨论】:
标签: php silverstripe silverstripe-4