Yii Проверить несвязанную переменную (не сохраняется)

Классическая проблема:

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

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

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

1

Решение

расширить 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!
}

Результаты, достижения:
введите описание изображения здесь
введите описание изображения здесь

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]