2014-10-02 1 views
1

Классическая проблема:Yii Validate ООН-связанной переменной (не сохраняется)

убедитесь, что пользователь принял условия договора, но стоимость приемки не сохраняется (связанно) в базе данных ...

  1. Продлить CFormModel, а не потому, что виджет CActiveForm (виджет CActiveForm связывает значения в БД)
  2. Дать CFormModel к действию контроллера
  3. Validate CFormModel

Я задаю этот вопрос, чтобы ответить на него, потому что существующие вопросы заканчиваются смотрите документацию ...

ответ

0

расширить CFormModle, определяют правила и должен подтвердить. С связанными переменными, которые вы подтвердили как часть сохранения. Теперь вы сами проверяете(), но Validate требует список атрибутов, который не определен в CFormModel. Ну так что ты делаешь? Вы можете сделать это:

$ Договор-> Validate ($> attributeNames Договор-())

Вот полный пример:

class Contract extends CFormModel 
{ 
... 
    public $agree = false; 
... 
    public function rules() 
    { 
     return array(
      array('agree', 'required', 'requiredValue' => 1, 'message' => 'You must accept term to use our service'), 
     ); 
    } 
    public function attributeLabels() 
    { 
     return array(
       'agree'=>' I accept the contract terms' 
     ); 
    } 
} 

Тогда в контроллере вы делаете это:

public function actionAgree(){ 
    $contract = new Contract; 
    if(isset($_POST['Contract'])){ 
     //$contract->attributes=$_POST['Contract']; //contract attributes not defined in CFormModel 
     ... 
     $contract->agree = $_POST['Contract']['agree']; 
     ... 
    } 
    if(!$contract->validate($contract->attributeNames())){ 
     //re-render the form here and it will show up with validation errors marked! 
    } 

результаты: enter image description here enter image description here

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