尝试将 beforeSave 钩子与一些服务器端验证一起使用并引发字段错误 - 它正在工作......有点......
由于未按要求保存而导致异常,如果未定义任何字段,则可以使用正确的消息查看基本异常。如果我定义字段,那么我看不到错误弹出窗口或 crud 表单上的错误信息。
需要明确的是,它不会让我保存并抛出异常。当我使用setField('fiscal_year')
它仍然没有根据异常保存时,它只是不显示异常。
下面的代码:
class Model_Finances extends Model_Table {
public $table='finances';
function init() {
parent::init();
$this->hasOne('Grant');
$this->addField('fiscal_year')->datatype('int');
$this->addField('requested')->datatype('money');
$this->addField('committed')->datatype('money');
$this->addField('spent')->datatype('money');
$this->getField('grant')->hidden(true);
$this->addHook('beforeSave',$this);
}
function beforeSave($model){
$exist = $this->api->db->dsql()
->table($this->table)
->field('count(1)')
->where('grant_id', 2) //manually set ID for testing.
->where('fiscal_year', $model['fiscal_year'])
->do_getOne();
// Validate fiscal year before saving
if($exist[0]) {
throw $this->exception('Fiscal year for this grant already exists')->setField('fiscal_year');
}
}
}
它是如何被使用的:
$finances = $grant->ref('Finances');
$finances->getField('fiscal_year')->setValueList($this->fiscalYears)->mandatory(true);
$crud=$tabs->addTab('Finances')->add('CRUD');
$crud->setModel($finances);
if($crud->grid)$crud->grid->addTotals(array('requested', 'committed', 'spent'));