2012-06-17 111 views
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無效。當然,我想說一些問題,但是 - 什麼?

謝謝!

回答

1

改變值正確的方法是:

$this['description'] = 'test; 
+0

感謝羅馬!我以這種方式開始並改變爲 - >以查看它是否有效,並且我用thas語法發送了我的示例,但是我之前檢查了$ this ['description']。 – Jaume

+0

謝謝羅馬!我以這種方式開始並改變爲 - >以查看它是否有效,並且我用thas語法發送了我的示例,但是我之前檢查了$ this ['description']。現在我再次檢查了它,並且看到它在beforeSave中工作,但不在BeforeInsert中。在beforeInsert中啓動了鉤子,但我在調試模式下看到的sql查詢沒有改變。對我來說不是一個問題,因爲我可以使用beforSave和檢查ID來知道我是插入還是更新,但我不知道爲什麼會發生這種情況。謝謝你在週日回答! :) – Jaume

+0

beforeInsert在第二個參數中傳遞查詢,這就是爲什麼您在模型中更改的值不再影響它。 'function beforeInsert($ q,$ m){ $ q-> set('somefield','someval'); },當然debug()也會有很大的幫助。 – romaninsh