关于POST的特性赋值,奇怪的问题,想不通了

我在Controller里这样写




        $model=$this->loadModel();

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

		{

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

            // 通过上边代码,下边两个特性不会被赋值

            $model->audit_by_unit=isset($_POST['Enrollment']['audit_by_unit'])?

                    $_POST['Enrollment']['audit_by_unit']:$model->audit_by_unit;

            $model->audit_by_yxrc=isset($_POST['Enrollment']['audit_by_yxrc'])?

                    $_POST['Enrollment']['audit_by_yxrc']:$model->audit_by_yxrc;

//            var_dump($model->attributes);

//            var_dump($_POST['Enrollment']);

//            Yii::app()->end();

			if($model->save())

            {

                if(Yii::app()->user->checkAccess('SuperAdmin'))

                    $this->redirect(array('admin'));

                else

                    $this->redirect(array('auditAdmin'));


            }

		}


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

			'model'=>$model,

		));

    }



下边是view里的文件片段




    <?php echo $form->errorSummary($model); ?>

    

    <?php if($model->exam->audit_user_id == Yii::app()->user->id): /*用人单位审核*/ ?>

	<div class="row">

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

		<?php echo $form->dropDownList($model,'audit_by_unit',Enrollment::$auditStatus); ?>

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

	</div>

    <div class="row">

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

		<?php echo $form->textField($model,'deny_reason_unit',array('size'=>80,'maxlength'=>255)); ?>

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

	</div>

    <?php endif; ?>


    <?php if(Yii::app()->user->checkAccess('SuperAdmin')):  /*人才中心审核*/ ?>

	<div class="row">

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

		<?php echo $form->dropDownList($model,'audit_by_yxrc',Enrollment::$auditStatus); ?>

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

	</div>


    <div class="row">

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

		<?php echo $form->textField($model,'deny_reason_yxrc',array('size'=>80,'maxlength'=>255)); ?>

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

	</div>

    <?php endif; ?>


	<div class="row buttons">

		<?php echo CHtml::submitButton('提交'); ?>

	</div>



出现的问题就是Controller里的注释语句,$model->attributes=$_POST[‘Enrollment’]以后,$model->audit_by_unit 或 $model->audit_by_yxrc 这两个的值不会被改变,非要通过下边的语句




            $model->audit_by_unit=isset($_POST['Enrollment']['audit_by_unit'])?

                    $_POST['Enrollment']['audit_by_unit']:$model->audit_by_unit;

            $model->audit_by_yxrc=isset($_POST['Enrollment']['audit_by_yxrc'])?

                    $_POST['Enrollment']['audit_by_yxrc']:$model->audit_by_yxrc;



你这两个变量在model的rules()里面声明了没?

在model的rules里我是这样的




	public function rules()

	{

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

		// will receive user inputs.

		return array(

			array('user_id, exam_id', 'required'),

			array('user_id, exam_id', 'numerical', 'integerOnly'=>true),

			array('deny_reason_unit', 'validateDenyReasonUnit'),

			array('deny_reason_yxrc', 'validateDenyReasonYxrc'),

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

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

			array('audit_by_unit, audit_by_yxrc', 'safe', 'on'=>'search'),

		);

	}


    /**

     * 对 deny_reason_unit 进行验证

     * @param string $attribute 所要验证的特性的名字

     * @param array $params 验证规则中指定的选项

     */

    public function validateDenyReasonUnit($attribute,$params)

    {

        if(!$this->hasErrors())

        {

            if($this->audit_by_unit == 2 && empty($this->deny_reason_unit))

            {

                $this->addError('deny_reason_unit', '审核未通过时要填写拒绝通过的原因');

            }

        }

    }


    /**

     * 对 deny_reason_yxrc 进行验证

     * @param string $attribute 所要验证的特性的名字

     * @param array $params 验证规则中指定的选项

     */

    public function validateDenyReasonYxrc($attribute,$params)

    {

        if(!$this->hasErrors())

        {

            if($this->audit_by_yxrc == 2 && empty($this->deny_reason_yxrc))

            {

                $this->addError('deny_reason_yxrc', '审核未通过时要填写拒绝通过的原因');

            }

        }

    }






array('audit_by_unit, audit_by_yxrc', 'safe', 'on'=>'search'),



你这句话设置了场景为search,把后面的 ‘on’=>‘search’ 去掉,或者加多个




array('audit_by_unit, audit_by_yxrc', 'safe'),



一语中的,谢谢 Davidhhuan

这个问题解决了。

也谢谢大家的关注

不客气不客气~大家多多交流交流 :)