2011-05-18 4 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 для меня. –

ответ

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'), 
     ); 
    } 
} 

Кроме того, вы не точно следуя доминантному типу использования для этого типа класса. Если бы я был вами, я бы предложил создать CRUD через gii и изучить шаблоны использования для моделей и форм.

+0

нет, я имею в виду свойства добавляет во время запуска приложение – kusanagi

+0

Я не совсем уверен, что вы пытаетесь сделать, но вы не можете динамически переопределить структуру класса во время выполнения в php, как вы можете на некоторых других языках (например, Ruby). Вы можете высмеять функциональность с помощью магических методов, но если вы не будете более конкретны в отношении того, что хотите делать со свойствами, я не могу вам помочь. Однако вы не сможете принудительно выполнить проверку свойств, которые не включены в атрибут только для чтения правил. –

+0

Я вижу, что вы пытаетесь сделать сейчас, но я не уверен, почему. Почему динамический атрибут должен иметь требуемое правило? Любые атрибуты, которые могут быть назначены или не могут быть назначены при проверке, должны просто передаваться в «безопасный» валидатор. –

Смежные вопросы