php - 使用 Yii 验证字段

标签 php mysql validation yii

我有两个相关模型,即 Candidate 和 Qualifications。他们之间是一对多的关系。我正在使用 CActiveForm 并使用事务来插入相关数据。从下面的代码中可以看出,候选人的 PK 是自动生成的,并作为 FK 发送到资格模型。
Controller

public function actionCreate()
{
    $model=new Candidate;
    $q=new Qualification;
    if(isset($_POST['Candidate'], $_POST['Qualification'])){
        $model->attributes=$_POST['Candidate'];
        $q->attributes=$_POST['Qualification'];

                if ($model->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                $success = $model->save(false);
                $q->candidate_id = $model->id;
                $success = $success ? $q->save() : $success;

                if ($success){
                    $transaction->commit();
                }
                else{
                    $transaction->rollBack();
                }

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


    }

我可以插入数据,但无法处理资格验证。通过使用上面的代码,如果我留下了资格模型的必填字段,它会产生一个错误(我不想要)。我希望资格验证应该在提交之前触发。它应该像候选人一样突出显示错误。 _form

<div class="row">
    <?php echo $form->labelEx($model,'father_name'); ?>
    <?php echo $form->textArea($model,'father_name',array('rows'=>6, 'cols'=>50)); ?>
    <?php echo $form->error($model,'father_name'); ?>
</div>
........

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

最佳答案

您已有的更好的方法:

public function actionCreate()
{
    $candidate=new Candidate();
    $qualification=new Qualification();

    if (isset($_POST['Candidate'], $_POST['Qualification'])) {
        $candidate->attributes=$_POST['Candidate'];
        $qualification->attributes=$_POST['Qualification'];

        $error = false;
        $transaction = Yii::app()->db->beginTransaction();
        try {
            if (!$candidate->save()) {
                throw new CException(CHtml::errorSummary($candidate));
            }
            $qualification->candidate_id = $candidate->id;
            if (!$qualification->save()) {
                throw new CException(CHtml::errorSummary($qualification));
            }
            $transaction->commit();
        } catch (Exception $e) {
            $transaction->rollBack();
            $error = $e->getMessage();
        }

        if (!$error) {
            $this->redirect(array('view','id'=>$candidate->id));
        }

        echo $error;
    }
}

关于php - 使用 Yii 验证字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032210/

相关文章:

c++ - 从用户那里获取 "yyyy/mm/dd, hh:mm"形式的日期输入并在 C++ 中验证日期?

c++ - 比较从函数返回的两个 std::string 常量(两个 json-spirit get_str()s)1-liner

php - 更改二维数组每一行中的键而不丢失值

php - 图片上传: Unexpected T_VARIABLE

php - MySQL中的一对多关系,选择 "child"表信息

php - PHP 中的 PDO 返回错误,但在 MySQL 控制台中不会发生

java - 如何在 Java 中验证字符串?

php - 使用jquery将表单中的字符链接到mysql中的图像

php - jquery中的复杂过滤器

python - MySQL - 匹配两个包含巨大数据的表并找到相似的数据