php yii在actionCreate上发送错误

时间:2012-09-19 13:15:08

标签: php forms error-handling yii

我有以下用于创建新记录的表格

<?php
/* @var $this ComponentsController */
/* @var $model Components */
/* @var $form CActiveForm */
?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'components-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,'component_id'); ?>
        <?php echo $form->textField($model,'component_id'); ?>
        <?php echo $form->error($model,'component_id'); ?>
    </div>

    <div class="row">
        <label class="required" for="FixedAsset_original_asset_number">
            Asset Number
        </label>
        <input id="Components_original_asset_number" type="text" name="Components[original_asset_number]">
        <?php //echo Chtml::textField('fixed_asset_id', FixedAsset::model()->FindByPk($model2->fixed_asset_id)->fixed_asset_id); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'description'); ?>
        <?php echo $form->textField($model,'description',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'description'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'manufacturer'); ?>
        <?php //echo $form->textField($model,'manufacturer'); ?>
        <?php   $manufacturer = Manufacturers::model()->findAll(array("order"=>"name"));
                $list = CHtml::listData($manufacturer, 'manufacturer_id', 'name');
                echo $form->dropDownList($model,'manufacturer', $list,array()); 
        ?>
        <?php echo $form->error($model,'manufacturer'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'medium'); ?>
        <?php //echo $form->textField($model,'medium'); ?>
        <?php   $medium = Medium::model()->findAll();
                $list = CHtml::listData($medium, 'medium_id', 'type');
                echo $form->dropDownList($model,'medium', $list,array()); 
        ?>
        <?php echo $form->error($model,'medium'); ?>

    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'version'); ?>
        <?php echo $form->textField($model,'version',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'version'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'serial_no'); ?>
        <?php echo $form->textField($model,'serial_no',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'serial_no'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'purchase_date'); ?>
        <?php //echo $form->textField($model,'purchase_date'); ?>
        <?php 
        $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                'id'=>'Components_purchase_date',
                'name'=>'Components[purchase_date]',
                //'value'=>CTimestamp::formatDate('d/m/Y',$item->validFrom),
                // additional javascript options for the date picker plugin
                'options'=>array(
                        'showAnim'=>'fold',
                        'dateFormat'=>'yy-mm-dd',


                ),
                'htmlOptions'=>array(
                        'style'=>'height:20px;'
                ),
        ));

        ?>
        <?php echo $form->error($model,'purchase_date'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'disposal_date'); ?>
        <?php //echo $form->textField($model,'disposal_date'); ?>
        <?php 
        $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                'id'=>'Components_disposal_date',
                'name'=>'Components[disposal_date]',
                //'value'=>CTimestamp::formatDate('d/m/Y',$item->validFrom),
                // additional javascript options for the date picker plugin
                'options'=>array(
                        'showAnim'=>'fold',
                        'dateFormat'=>'yy-mm-dd',


                ),
                'htmlOptions'=>array(
                        'style'=>'height:20px;'
                ),
        ));
        ?>
        <?php echo $form->error($model,'disposal_date'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'model'); ?>
        <?php echo $form->textField($model,'model',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'model'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'nol'); ?>
        <?php echo $form->textField($model,'nol'); ?>
        <?php echo $form->error($model,'nol'); ?>
    </div>



    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

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

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

我想向表单上的字段Components_original_asset_number发送错误。我怎么做到这一点。在控制器功能中,我正在检查它是否存在,如果不是我想在表单或消息上显示错误。 original asset number是我在此表单上显示的单独模型的一部分。

public function actionCreate()
{
    $model = new Components;
    $model_fixedAsset = new FixedAsset;
    $model_comAsset = new ComAsset;

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

    if(isset($_POST['Components']))
    {
        $model->attributes=$_POST['Components'];
        $fixedAssetId = null;


        // Check if asset exist and get PK
        if( $_POST['Components']['original_asset_number'] != "" ){
            //print_r($_POST['Components']);
            $criteria = new CDbCriteria;
            $criteria->condition = "(original_asset_number = :original_asset_number)";
            $criteria->params = array(":original_asset_number" =>  $_POST['Components']['original_asset_number'] );
            $fixedAssetRow = FixedAsset::model()->find($criteria);
            //print_r($fixedAssetRow);
            if($fixedAssetRow){
                $fixedAssetId = $fixedAssetRow->fixed_asset_id;
            }
            //echo $fixedAssetId;
        }

        if($fixedAssetId){

        /*if($model->save())
            $this->redirect(array('view','id'=>$model->component_id));*/

        // Create com_asset record

        }else{
            //no asset found return error message to input corect asset number or create asset in navision and run php script to update mysql db
        }
    }

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

1 个答案:

答案 0 :(得分:9)

您应该将模型中的'original_asset_number'添加为变量并设置所需的验证规则。然后,您可以使用以下行来设置错误

$model->addError('original_asset_number', " no asset found return error message to input corect asset number or create asset in navision and run php script to update mysql  ");

此外,您使用以下方式显示字段和错误。

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

    <div class="row">
    <?php echo $form->labelEx($model,'original_asset_number'); ?>
    <?php echo $form->textField($model,'original_asset_number',array('size'=>60,'maxlength'=>255)); ?>
    <?php echo $form->error($model,'original_asset_number'); ?>
</div>