在yii中创建记录时模型验证不起作用

时间:2013-12-19 10:54:13

标签: php validation yii

我真的不知道为什么会发生我的模型验证在yii中创建记录时无法正常工作。   不显示任何错误。  问题是,如果任何必填字段为空,但它传递给不显示错误的显示页面   但它没有插入记录,因为所有必填字段都没有填写。

我需要以相同的形式显示错误,即如果必填字段为空,则不应通过验证。

验证在更新中没有问题, 创建表单的问题

但是如果填写了所有必填字段,它会插入记录。

更新中显示的错误是黑色而不是红色,默认为yii ......是由于扩展使用

模型规则

        array('name, category, model, brand, description, price', 'required'),
        array('pimg', 'file','types'=>'jpg','on'=>'create'),
        array('pimg', 'file','types'=>'jpg','on'=>'update', 'allowEmpty'=>true),

创建控制器

     $model=new controllername;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['controllername']))
    {
        $model->attributes=$_POST['controllername'];
        $model->pimg=CUploadedFile::getInstance($model,'pimg');
        $fileName = $model->pimg;


        if($model->save())
            $model->pimg->saveAs('images/'.$fileName);
            $this->redirect(array('display','id'=>$model->productid));

    }

    $this->render('create',array(
      'model'=>$model,
    ));

视图

  <?php $form=$this->beginWidget('CActiveForm',array(
   'id'=>'form_name',
     'enableAjaxValidation'=>false,
    'htmlOptions'=>array('enctype'=>'multipart/form-data'),
      )); ?>

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





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

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


  <?php echo $form->labelEx($model,'description'); ?>
    <?php echo $form->textField($model,'description',array('size'=>60,'maxlength'=>256)); ?>
    <?php echo $form->error($model,'description'); ?>



    <?php echo $form->labelEx($model,'pimg'); ?>
    <?php echo $form->hiddenField($model,'pimg',array('length'=>222)); ?>
    <?php echo $form->fileField($model, 'pimg',array('id'=>'imgInput',)); ?>

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



    <?php echo $form->labelEx($model,'category'); ?>
    <?php echo $form->dropDownList($model,'category',$model->getCat()); ?>
    <?php echo $form->error($model,'category'); ?>


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

    <?php echo $form->labelEx($model,'price'); ?>
    <?php echo $form->textField($model,'price'); ?>
    <?php echo $form->error($model,'price'); ?>






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


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

有人可以告诉我如何实现这一目标。谢谢

2 个答案:

答案 0 :(得分:1)

尝试用

array('name, category, model, brand, description, price', 'required'),
array('pimg', 'file','types'=>'jpg','on'=>'insert', 'allowEmpty'=>false),
array('pimg', 'file','types'=>'jpg','on'=>'update', 'allowEmpty'=>true),

答案 1 :(得分:0)

如果您重定向页面,则不会显示错误

无论如何,

您的代码重定向,if (save())或不。{/ p>

{}

之后添加if
if($model->save())
{
            $model->pimg->saveAs('images/'.$fileName);
            $this->redirect(array('display','id'=>$model->productid));
}