2011-05-18 39 views
0

我得到了這樣的形式警予CFormModel動態特性

class CC extends CFormModel 
{ 
    public $static_field; 
    public $fields; 

    public function rules() 
    { 
     return array(
      array('static_field, testF', 'required') 
     ); 
    } 



    public function getForm() 
    { 
     return new CForm(array(
      'showErrorSummary'=>true, 
      'elements'=>array(
       'static_field'=>array(), 
       'testF'=>array(), 
      ), 
      'buttons'=>array(
       'submit'=>array(
        'type'=>'submit', 
        'label'=>'Next' 
       ) 
      ) 
     ), $this); 
    } 

    public function attributeLabels() 
    { 
     return array(
      'static_field' => 'static_field' 
     ); 
    } 


    public function __get($name) 
    { 
     if (isset($this->fields[$name])) 
      return $this->fields[$name]; 
     else 
      return ''; 
    } 

    public function __set($name, $value) 
    { 
     $this->fields[$name] = $value; 
    } 
} 

我想添加動力場testF

我嘗試使用__get\__set和數組值,但沒有工作。有任何想法嗎?

+0

這看起來不像我的MVC。 – 2011-05-18 14:51:19

回答

1

如果通過動態表示不需要,則可以將它作爲屬性添加,就像您對static_field所做的一樣。所有屬性或字段都是FormModel類的封裝成員數據。所以,如果你想增加你的屬性dynamic_field,你可以用這種方式添加:

class CC extends CFormModel 
{ 
    public $static_field; 
    public $dynamic_field; 

    public function rules() 
    { 
     return array(
      array('static_field','required'), 
      array('dynamic_field','safe'), 
     ); 
    } 
} 

此外,你不正是這種類型的類的主要使用模式下。如果我是你,我會建議通過gii創建一些CRUD並檢查模型和表單的使用模式。

+0

不,我的意思是在運行應用程序時添加屬性 – kusanagi 2011-05-18 14:03:49

+0

我不太確定你想要做什麼,但是你不能在運行時動態地重新定義類的結構,就像你可以在一些其他語言中一樣如Ruby)。你可以用神奇的方法來嘲笑這個功能,但除非你更具體地說明你想要對這些屬性做什麼,否則我對你無能爲力。但是,您將無法對未包含在規則只讀屬性中的屬性執行驗證。 – 2011-05-18 15:46:15

+0

我明白你現在想做什麼,但我不知道爲什麼。爲什麼動態屬性具有所需的規則?驗證時可能或不可能分配的任何屬性都應傳遞給「安全」驗證器。 – 2011-05-18 15:54:34