Классическая проблема:
проверить, что пользователь принял условия контракта, но стоимость акцепта не сохранена (привязана) в базе данных …
Я задаю этот вопрос, чтобы ответить на него, потому что существующие вопросы заканчиваются в документации …
расширить 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!
}
Результаты, достижения:
Других решений пока нет …