发现CHtml类中1749行有BUG

发现CHtml类中1749行有BUG

不知道是不是真正的BUG,但是在对象不存在的时候 是会报错的

Fatal error: Call to a member function hasErrors() on a non-object in D:\lpmx\htdocs\yii\framework\web\helpers\CHtml.php on line 1749

我本地修改为 if(is_object($model) && $model->hasErrors($attribute)) … 这样就不报错了! :rolleyes:

这不算bug吧,个人觉得是你的用法不太对?$model怎么会不是对象呢?

我在viwe中添加了一个别的 变量的时候 就会有这样的问题出现 尤其是update的时候

别的变量?

也许你可以列出你的code来看看。 ;D

控制器中的代码




    /**

     * Updates a particular model.

     * If update is successful, the browser will be redirected to the 'view' page.

     * @param integer $id the ID of the model to be updated

     */

    public function actionUpdate($id)

    {

        $model = $this->loadModel($id);

        $parent = $model->getParentNode();

        //如果ID=1 的时候 就是ROOT的是没有上级分类的 $parent 就是一个空的值

        // Uncomment the following line if AJAX validation is needed

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


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

        {

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

            if ($model->save())

                $this->redirect(array('view', 'id' => $model->id));

        }

        

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

            'model' => $model,

            'parent' => $parent,

        ));

    }



视图_from的代码:




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'tree-form',

	'enableAjaxValidation'=>false,

)); ?>


	<p class="note">Fields with <span class="required">*</span> are required.</p>

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

	<div class="row">

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

		<?php echo $form->textField($parent,'name',array('size'=>30,'maxlength'=>255, 'name'=>'father_name', 'disabled'=>'disabled')); ?>

	</div>

	<div class="row">

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

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

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

	</div>


	<div class="row buttons">

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

	</div>


<?php $this->endWidget(); ?>


</div><!-- form -->



问题就出在 修改 Root 名称的时候 $parent 返回的是一个空对象。

CHtml类中1749行 if($model->hasErrors($attribute)) … 中的$model 是一个空对象。PHP就会报出 Fatal error: Call to a member function hasErrors() on a non-object

是你代码写的不对,你得先保证自己传入的参数$model是一个对象才行!!!!

有点不太懂,你说的意思。

$model = $this->loadModel($id);

你这段代码保证一定是返回一个CActiveRecord对象了吗?

你会不会在没有这个$id的时候,直接返回null了?

或者说,你是类似这样?




public function loadModel($id)

{

    return MyModel::findByPk($id);

}