【发布时间】:2012-09-27 03:27:14
【问题描述】:
尝试使用 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'));
【问题讨论】:
-
您是否保存在表单中?尝试使用
$form->onSubmit(function($f){ $f->update()->js()->univ()->successMessage('All ok')->execute; }); -
嗨 @romaninsh 它是从 CRUD 元素中保存的。
-
添加了更多代码以显示用法@romaninsh