加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在Yii中,有没有办法用CActiveForm验证表格输入?

发布时间:2020-12-13 22:33:59 所属栏目:PHP教程 来源:网络整理
导读:情况 我在Yii的网站Collecting Tabular Input上使用了wiki文章作为例子. 我不认为我需要在传统意义上对多个模型验证表格输入.我只有一个模型,但我正在动态创建表单中的字段数.这里有更多背景知识. 我正在导入CSV文件,其标题在不同文件中按顺序变化.在正确解
情况

我在Yii的网站Collecting Tabular Input上使用了wiki文章作为例子.

我不认为我需要在传统意义上对多个模型验证表格输入.我只有一个模型,但我正在动态创建表单中的字段数.这里有更多背景知识.

我正在导入CSV文件,其标题在不同文件中按顺序变化.在正确解析文件之前,用户需要映射哪个标头将映射到哪个表/列.

我有一个模型,从CFormModel扩展ImportParseForm.它实际上只有一条规则:

public function rules()
{
    return array(
        array('header','required'),);
}

这是我的观点片段:

<?php foreach($headers as $h => $hItem): ?>    
<div class="row">
    <?php echo CHtml::label(CHtml::encode($hItem),"[$h]header"); ?> maps to
    <?php echo $fParse->textField($mForm,"[$h]header"); ?>
    <?php echo $fParse->error($mForm,"[$h]header"); ?>
</div>
<?php endforeach; ?>

这是我的控制器片段:

$mForm = new ImportParseForm;
        $valid = true;

        if (isset($_POST['ImportParseForm'])){
            foreach ($headers as $h => $hVal){
                if (isset($_POST['ImportParseForm'][$h])){
                    $mForm->attributes = $_POST['ImportParseForm'][$h];
                    $valid = $mForm->validate() && $valid;
                }
            }


            if ($valid){
                // Process CSV
            }
        }

如果所有字段都有效,则它按预期传递.问题是如果其中一个字段无效(或者在这种情况下为空),则所有字段都标记为无效.

在Yii 1.1.10中,他们添加了CActiveForm::validateTabular(),但看起来它适用于多个型号.不是我在这里的东西.但是对于踢,我将以下内容添加到我的控制器中(当然,删除了其他类型的验证):

CActiveForm::validateTabular($mForm,array('header'));

表单本身仅在填充第一个元素时有效.如果填充了第一个元素,它将使用相同的值设置所有其他元素(并通过验证).

基本上,我可以使用CActiveForm对动态生成的字段进行验证(类似于表格输入,但只有一个模型)?

解决方法

我试图做类似的事情,这是我的模型更新表格的解决方案.在这里,我利用了值更改事件的更新模型属性的模型验证,它不需要提交按钮,看起来简单而且花哨.这是代码片段……

查看代码:

<?php foreach($modelArray as $model): ?>
        <div class="row">
                <?php echo $form->textField($model,"[$model->id]attributeName"); ?>
                <?php echo $form->label($model,"[$model->id]attributeName"); ?>
                <?php echo $form->error($model,"[$model->id]attributeName"); ?>
        </div>
    <?php endforeach; ?>

控制器代码:

objArray = array();
    foreach($_REQUEST['ModelName'] as $id => $attributes){
        $obj = ModelName::model()->findByPk($id);
        $obj->attributes = $attributes;
        $obj->save();
        $objArray[$id] = $obj;
    }
    echo CActiveForm::ValidateTabular($objArray);
    Yii::app()->end();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读