کار نکردن پسوورد ریپیت و کپجا

سلام خدمت اساتید

موقع اضافه کردن یوزر ولیدیشن ها کار میکنه ولی پسوورد ریپیت و وریفای کد وقتی درست هم میزنم همش ارور میگیره

کد rules:




public function rules() {

        // NOTE: you should only define rules for those attributes that

        // will receive user inputs.

        return array(

            array('active_email, ssn, active_user', 'numerical', 'integerOnly' => true),

            array('firstName_en, firstName_pe, lastName_en, lastName_pe, email, password', 'length', 'max' => 255),

            array('firstName_en, firstName_pe, lastName_en, lastName_pe, email', 'required'),

            array('password', 'required' , 'on'=>array('Add','changePassword')),

            array('country, state, city, mobile_cell', 'length', 'max' => 150),

            array('zipcode, phone, fax', 'length', 'max' => 100),

            array('street_address', 'safe'),

            array('email', 'unique'),

            array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(), 'on'=>array('Add')),

            array('password', 'compare', 'on'=>array('changePassword','Add')),

            array('password_repeat', 'safe', 'on'=>array('changePassword','Add')),

            // The following rule is used by search().

            // @todo Please remove those attributes that should not be searched.

            array('id, firstName_en, firstName_pe, lastName_en, lastName_pe, email, active_email, password, country, state, city, street_address, zipcode, phone, fax, mobile_cell, ssn, active_user, date_create, date_update', 'safe', 'on' => 'search'),

        );

    }



کنترلر :




public function actionAdd()

	{

		$model=new Users;

                

                $this->performAjaxValidation($model);

                

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Users']))

		{

                        $model->attributes=$_POST['Users'];

                        $model->scenario = 'Add';

                        if($model->validate()){

			if($model->save(false))

                                Yii::app()->authManager->assign('owner',$model->id);

				$this->redirect(array('site/index'));

                        }

		}


		$this->render('add',array(

			'model'=>$model,

		));

	}



قسمت مربوط به پسوورد ریپیت و وریفای در ویو




<div class="form-group">

            	<?php echo $form->labelEx($model,'password_repeat'); ?>

		<?php echo $form->passwordField($model,'password_repeat',array('class'=>'form-control','id'=>'input_form')); ?>

		<?php echo $form->error($model,'password_repeat'); ?>

	</div>




        <div class="form-group">

            <?php $this->widget('CCaptcha'); ?><br>

            <?php echo $form->textField($model,'verifyCode',array('class'=>'form-control subject_Violations_verify','id'=>'input_form')); ?>

        </div>



در مدل پسوورد ریپیت و وریفای هم پارامتر هاش رو تعریف کردم

[right][rtl][font="Tahoma"]

سلام

الان شما تو این خط:

[/font][/rtl][/right]




array('password', 'compare', 'on'=>array('changePassword','Add')),



[right][rtl][font="Tahoma"]

خب password رو با چی دارید مقایسه میکنید؟! فکر کنم این قاعده باید این شکلی باشه:

[/font][/rtl][/right]




array('password_repeat', 'compare', 'compareAttribute'=>'password')



ببینید مگه توی ایی اینطور نیست که وقتی برای تکرار پسوورد :

password_repeat

رو تعریف میکنیم خود ایی میاد دنبال کلمه ریپیت بعد از کلمه پسوورد میگرده و با اون تطبیق میده؟

این چیزی هم که شما گفتید انجام دادم جواب نداد

[font="Tahoma"][rtl]

لطفاً کد کامل Model و کد اکشنهای Add و ChangePassword رو بگذارین. ندیده نمیشه گفت مشکل از کجاست.

[/rtl][/font]

[right][rtl][font="Tahoma"]

نه والا ! من دفعه اوله دارم این حرف رو از شما میشنوم! :دی

اشکال از اینجاست:

[/font][/rtl][/right]




public function actionAdd()

        {

                $model=new Users;

                ...



[right][rtl][font="Tahoma"]

شما اومدی توی rule ها، گفتی وقتی پسورد و کپچا رو چک کنه ک سناریو add یا changepassword باشه

پس توی اکشن add باید وقتی مدل رو میسازید، سناریو رو هم تعیین کنید.

به یکی از این دو روش:

[/font][/rtl][/right]




$model = new Users('add');


$model = new Users;

$model->scenario = 'add';



[right][rtl][font="Tahoma"]

ضمنان اگر بار هم درست نشد لطفا اروری ک میده رو هم اینجا بنویسید

[/font][/rtl][/right]

تشکر

با روشی که گفتید حل شد

[font="Tahoma"][rtl]

بله این چیزی که میگین درسته. وقتی validation رو این شکلی مینویسیم:

[/rtl][/font]


array('password', 'compare', 'on'=>array('changePassword','Add')),

[font="Tahoma"][rtl]

چون compareAttribute رو مشخص نکردین و اسم فیلدتون هم password هست، خودش دنبال فیلدی به اسم password_repeat میگرده. این قسمت مشکلی نداره ولی همونطور که گفتن، باید سناریو رو موقع ساخت مدل، مشخص کنید.

[/rtl][/font]

[right][rtl][font="Tahoma"]

واقعا خودش دنبال password_repeat میگرده؟! من تا حالا نمیدوسنتم :) کجای مستندات به این اشاره شده؟

[/font][/rtl][/right]

[font=“Tahoma”][rtl]توی دلم داشتم میگفتم چه مسخره! مثلاً خواسته خیلی هوشمند نشون بده الان؟! :D[/rtl][/font]

[font="Tahoma"][rtl]

هم توی خود مستندات اشاره شده (لینک) و هم توی کتاب Web Application Development with Yii and PHP صفحات 136 و 137

[/rtl][/font]