サーバー側の検証で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'));