1
我有一個非常簡單的類這樣做,只是爲了學習,但我不能把它的工作就像我在http://agiletoolkit.org/learn/understand/model/actions更改值掛鉤
這是類定義見:
class Model_Task extends Model_Table {
public $table='task';
function init(){
parent::init();
$this->addField('user_id')->system(true);
$this->addField('name')->mandatory('No has indicado un nombre para la tarea');
$this->addField('description')->dataType('text');
$this->addField('state')->system(true);
$this->addHook('beforeSave',function($m){
$m->description='test';
return $m;
});
$this->debug();
}
}
我試圖whih的samble頁面格式太:
class Model_Task extends Model_Table {
public $table='task';
function init(){
parent::init();
$this->addField('user_id')->system(true);
$this->addField('name')->mandatory('No has indicado un nombre para la tarea');
$this->addField('description')->dataType('text');
$this->addField('state')->system(true);
$this->addHook('beforeSave',$this);
$this->debug();
}
function BeforeSave(){
$this->description='test';
return $this;
}
}
任務測試頁也很簡單:
class page_Task extends Page {
function init(){
parent::init();
$m=$this->add('Model_Task');
$f=$this->add('Form');
$f->setModel($m);
$f->addSubmit('Guardar');
//Task submit
$f->onSubmit(function($form){
$form->update();
$form->js()->univ()->redirect('index?add_ok=1')->execute();
});
}
}
在模型描述的兩個實現中,都以表格中插入的值保存,而不是使用'Test'。如果我在beforeTest函數中回顯$ this-> description或$ m-> description,那麼在我設置它之後和'Test'之後它是空的,但它不會使生成的sql無效。當然,我想說一些問題,但是 - 什麼?
謝謝!
感謝羅馬!我以這種方式開始並改變爲 - >以查看它是否有效,並且我用thas語法發送了我的示例,但是我之前檢查了$ this ['description']。 – Jaume
謝謝羅馬!我以這種方式開始並改變爲 - >以查看它是否有效,並且我用thas語法發送了我的示例,但是我之前檢查了$ this ['description']。現在我再次檢查了它,並且看到它在beforeSave中工作,但不在BeforeInsert中。在beforeInsert中啓動了鉤子,但我在調試模式下看到的sql查詢沒有改變。對我來說不是一個問題,因爲我可以使用beforSave和檢查ID來知道我是插入還是更新,但我不知道爲什麼會發生這種情況。謝謝你在週日回答! :) – Jaume
beforeInsert在第二個參數中傳遞查詢,這就是爲什麼您在模型中更改的值不再影響它。 'function beforeInsert($ q,$ m){ $ q-> set('somefield','someval'); },當然debug()也會有很大的幫助。 – romaninsh