- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用了 Yii 网站上的维基文章,Collecting Tabular Input , 举个例子。
我认为我不需要针对多个模型验证传统意义上的表格输入。我只有一个模型,但我正在动态创建表单中的字段数。这里有更多背景知识。
我正在导入 CSV 文件,其中的标题在不同文件中的顺序有所不同。在正确解析文件之前,用户需要将哪个 header 映射到哪个表/列。
我有一个模型,ImportParseForm
从 CFormModel
扩展而来。它实际上只有一个规则:
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/
如前所述 here , Yii 提供虚拟属性。我在我的模型中添加了以下内容: public function getTest() { ... } public function setTest($va
我是 yii 的新手,我正在尝试将数据保存在 CactiveForm 上的不同表中..这是我查看的代码: beginWidget('CActiveForm', array( 'id
我的应用程序中有一个事件表单。但是客户端验证不起作用。表单代码如下所示: beginWidget('CActiveForm', array( 'id'=>'application-data-s
我有一个基本的 Yii CActiveForm,我用它来收集用户的输入,然后通过默认的 Yii ActiveRecord 模型[/编辑]将其插入数据库[编辑]。与任何人一样,我想确保聪明的用户不会通过
我需要将 data-ajax = "false"属性传递给表单。 jQuery Mobile 需要此属性才能停止使用 Ajax 加载页面。 这是我的代码: beginWidget('CActiveF
这就是你的三个概念,我真的不明白我们应该用什么,在什么场景下? 任何人都可以善意地澄清那些 Yii 元素,我们应该在什么情况下使用它们? 最佳答案 在 CForm 的文档中,可以阅读以下内容: ...
我使用以下代码创建表单: beginWidget('CActiveForm', array( 'id'=>'contacts-form', 'enableAjaxValidation'
您好,我是 yii 框架的新手,目前正在尝试通过数据库身份验证建立登录。但是我反复收到这个错误 CException CActiveForm and its behaviors do not have
我对 Yii 和 PHP 都比较陌生,在编写用户友好的 URL 时遇到一些问题。 我想根据用户在表单中输入的参数创建一个 URL,该表单是 CFormModel 的扩展。我最初选择了 GET 方法 而
情况 我使用了 Yii 网站上的维基文章,Collecting Tabular Input , 举个例子。 我认为我不需要针对多个模型验证传统意义上的表格输入。我只有一个模型,但我正在动态创建表单中的
我是一名优秀的程序员,十分优秀!