Je suis nouveau dans le cadre YII. Je suis en train d'écrire une méthode simple pour changer le mot de passe, je veux valider les contrôles comme si vide puis montrer le message d'erreur ou si le mot de passe et re-saisir le mot de passe ne correspond pas alors montrer l'erreur. Je l'ai utilisé le code ci-dessous pour ce faire:
public function actionChange()
{
$model=new Users;
$model->scenario='change';
if (isset($_POST['Users'])) {
$model->setAttributes($_POST['Users']);
if($model->validate())
{
print "true";
}
else{
print "false";
}
if($model->validate())
{
$pass = md5($_POST['Users']['newPassword']);
$userModel = Users::model()->findByPk(Yii::app()->user->id);
$userModel->password = $pass;
$data = $userModel->update();
}
if(isset($data))
{
Yii::app()->user->setFlash('success',"Password changed successfully!");
$this->redirect(array('Users/change'), true);
}
}
$this->render('change_password', array('model'=>$model,true));
}
Mais **$model->validate()**
retourne toujours faux me soit i remplir les champs ou non.
mise à jour:
est fonction de règle ici:
public function rules()
{
return array(
array('is_active', 'numerical', 'integerOnly'=>true),
array('first_name, joining_date,last_name, employee_code, username, password, role', 'required'),
array('employee_code', 'numerical', 'integerOnly'=>true),
array('username','email'),
array('username','valid_username','on'=>array('create')),
//array('username', 'contraints', 'readOnly'=>true, 'on'=>'update'),
array('currentPassword, newPassword, newPasswordRepeat', 'required','on'=>array('change')),
//array('newPassword', 'length', 'min' => 6, 'max'=>20, 'message'=>Yii::t("translation", "{attribute} is too short.")),
//array('newPassword','ext.SPasswordValidator.SPasswordValidator', 'preset' => 'strong', 'max' => 41),
array('newPassword', 'compare', 'compareAttribute'=>'newPasswordRepeat','on'=>array('change')),
array('currentPassword', 'equalPasswords','on'=>array('change')),
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>array('forgotPassword')),
array('joining_date', 'safe'),
array('user_id, first_name, last_name, employee_code, username, password, role, joining_date, pending_regular_leave, pending_medical_leave, allocated_regular_leave, allocated_medical_leave, is_active', 'safe', 'on'=>'search'),
);
}
public function equalPasswords($attribute, $params)
{
$user = Users::findByPk(Yii::app()->user->id);
if ($user->password != md5($this->currentPassword))
$this->addError($attribute, 'Old password is incorrect.');
}
s'il vous plaît aidez-moi.
Montrez votre fonction validate (comme Jon indiqué ci-dessous - il n'est pas valide, mais les règles fonctionnent) à partir du modèle. Il devrait contenir des règles de validation qui échouent probablement. – renathy
Pas la fonction de validation - montre la fonction 'rules()' où vos règles de validation sont définies. Vous pouvez aussi 'print_r ($ model-> getErrors())' pour voir exactement ce qui ne valide pas et pourquoi. – Jon
Peut-être que vous avez plus de règles que obligatoire, comme le type entier ... Afficher les règles plz – Pouki