2014-08-28 158 views
1

我有一個自定義行爲,在AppModel.php中指定,可根據所選語言自動創建一個字段。因此,取決於所選擇的語言,name_engnamename_franame無法使用beforeValidate初始化變量

... 
$virtualField = sprintf($model->name.'.'.$name.'_%s', Configure::read('Config.language')); 
$virtualFields[$name] = $virtualField; 
$model->virtualFields = $virtualFields; 
... 

這部分工作。

當我提交編輯表單時,出現驗證錯誤,並且在編輯視圖出現錯誤提示時該字段不可用時出現問題。我相信這是由於我的行爲在這個過程中沒有被調用,或者是使用表單數據創建的嗎?

我想我會使用beforeValidate來初始化這些值。但是,它不工作了:

AppModel.php

function beforeValidate(array $options = array()){ 
    //hard coded for test purposes 
    $this->data['CertificateType']['name'] = $this->data['CertificateType']['name_'.Configure::read('Config.language')] 
    return true; 
} 

在視圖(edit.ctp):現場仍一旦我提交這給了我這個錯誤的形式不存在

echo $this->request->data['CertificateType']['name'];

本質上,如何複製自定義行爲的功能並在表單提交但未驗證之後初始化我的字段?

回答

0

最終需要的邏輯放在AppController.php中。現在一切正常。