gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:42:56 35 4
gpt4 key购买 nike

情况

我使用了 Yii 网站上的维基文章,Collecting Tabular Input , 举个例子。

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

我正在导入 CSV 文件,其中的标题在不同文件中的顺序有所不同。在正确解析文件之前,用户需要将哪个 header 映射到哪个表/列。

我有一个模型,ImportParseFormCFormModel 扩展而来。它实际上只有一个规则:

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; ?>

这是我的 Controller 的一个片段:

        $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() ,但看起来它适用于多个模型。不完全是我这里的。但是为了好玩,我将以下内容添加到我的 Controller 中(当然删除了其他类型的验证):

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; ?>

Controller 代码:

    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();

关于php - 在 Yii 中,有没有办法用 CActiveForm 验证表格输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9576776/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com