php - php yii将错误发送到actionCreate上的表单

标签 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发送错误。我将如何实现这一目标。在 Controller 功能中,我正在检查是否存在,如果我不想要在表单或消息上显示错误。 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,
    ));
}

最佳答案

您应该在模型中添加“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>

关于php - php yii将错误发送到actionCreate上的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495514/

相关文章:

javascript - 如何从动态生成的下拉值中选择值并在 php 中对其执行查询

php - MySQLi 根据用户角色进行面向对象的重定向

php - 如何让 PHP 使用代理设置来连接互联网?

PHP:对象上的递归htmlspecialchars

html - 为什么单击浏览器后退按钮时有时会清除 HTML 表单

forms - cgi.parse_multipart 函数在 Python 3 中抛出 TypeError

JQuery表单回调函数

javascript - JavaScript 错误处理的最佳实践是什么?

angular - 为什么没有将此throwError捕获在catchError中?

java - head 无法解析或不是字段错误