Я пытаюсь осуществить регистрацию пользователей с помощью yii ActiveRecord. проблема в том, что каждый раз при загрузке представления я получаю следующее исключение:
User has an invalid validation rule.
The rule must specify attributes to be validated and the validator name.
вот соответствующая часть из модели Users:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('username, password,verifyCode,email','message'=>'Tidak boleh kosong'),
//array('password','compare'),
array('verifyCode', 'captcha', 'required', 'allowEmpty'=>!extension_loaded('gd')),
array('level_id', 'numerical', 'integerOnly'=>true),
array('username', 'length', 'max'=>20),
array('password, email', 'length', 'max'=>50),
//array('password_repeat','required'),
array('avatar', 'file', 'types'=>'gif,png,jpg'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, username, password, email, joinDate, level_id, avatar', 'safe', 'on'=>'search'),
);
}
контроллер:
public function actionRegister() {
$registration = new RegistrationForm("register");
// collect user input data
if (isset($_POST['RegistrationForm'])) {
$registration->attributes = $_POST['RegistrationForm'];
$registration->attributes = $_POST['RegistrationForm'];
// validate user input and redirect to the previous page if valid
if ($registration->validate()) {
// create an account model
$account = new User;
$account->username = $registration->username;
$account->password = $registration->password;
$account->email = $registration->email;
$account->joinDate = new CDbExpression('NOW()');
//$account->level_id = 1;
if ($account->save()) {
$member = new Member;
$member->attributes = $registration->attributes;
$member->user_id = $account->id;
if ($member->save()) {
$this->redirect(array('index'));
} else {
$registration->addErrors($member->getErrors());
}
} else {
$registration->addErrors($account->getErrors());
}
}
}
$this->render('register', array('model' => $registration));
}
Это потому, что вы пропустили валидатор в своем первом правиле. Как я думаю, вы пропустили требуемый валидатор.
Так что вам нужно изменить это:
array('username, password,verifyCode,email','message'=>'Tidak boleh kosong'),
Чтобы что-то вроде этого:
array('username, password,verifyCode,email','required','message'=>'Tidak boleh kosong'),
Другая ошибка в том, что вы используете проверочный код. Капчу можно использовать только в виде с CFormModel, CCaptcha Widget и Действие CCaptcha.
Если вы хотите загрузить файл, который не требуется, вам нужно добавить allowEmpty:
array('avatar', 'file', 'allowEmpty' => true, 'types'=>'gif,png,jpg'),
Других решений пока нет …