Php 向不属于模型的动态字段添加验证错误
我目前使用的代码允许用户创建新的表单字段,然后将它们设置为必需或非必需。我遇到的问题是,由于这是一个组件,而不是在模型中,如果数据库中的validation等于1,我就无法将其添加到规则中 如何向规则动态添加值?或者至少在这些字段中添加错误。即,向所有属性添加一个值为必填字段1的验证器Php 向不属于模型的动态字段添加验证错误,php,yii,Php,Yii,我目前使用的代码允许用户创建新的表单字段,然后将它们设置为必需或非必需。我遇到的问题是,由于这是一个组件,而不是在模型中,如果数据库中的validation等于1,我就无法将其添加到规则中 如何向规则动态添加值?或者至少在这些字段中添加错误。即,向所有属性添加一个值为必填字段1的验证器 class DynamicForm extends CWidget { public $attributes = array(); public $id = null; public
class DynamicForm extends CWidget {
public $attributes = array();
public $id = null;
public $enctype = null;
public $target = null;
public $action = null;
public $model_name = '';
public $method = 'post';
public function init() {
parent::init();
}
public function run() {
foreach ($this->attributes as $attr) {
$attr['formname'] = $this->model_name . '_' . $attr['name'];
$attr['htmlOptions'] = array('class' => 'span5', 'placeholder' => $attr['name']);
$attr['htmlOptions']['class'] .= ' form-control';
if ($attr['required'] === 1){
$attr['requiredfields'] = array('required' => true);
}else{
$attr['requiredfields'] = '';
}
if ($attr['type'] == 'text') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::textField($attr['formname'], $attr['value'], $attr['htmlOptions']);
echo '</div>';
}
elseif ($attr['type'] == 'radio') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::radioButton($attr['formname'],$attr['requiredfields']);
echo '</div>';
}
elseif ($attr['type'] == 'textarea') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::textArea($attr['formname'], $attr['value'], $attr['htmlOptions']);
echo '</div>';
}
elseif ($attr['type'] == 'select') {
$items = explode(',', $attr['options']);
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
//echo CHtml::dropDownList($attr['formname'], $attr['value'], array($items));
echo CHtml::dropDownList($attr['formname'], $attr['value'], $items, array('class'=>'form-control','prompt'=>'Please Choose'));
echo '</div>';
}
elseif ($attr['type'] == 'boolean') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::radioButtonList($attr['formname'], $attr['value'], array('No' => 0, 'Yes' => 1));
echo '</div>';
}
}
}
}
特别是这些线路
if ($var->required) {
$var->validatorList->add(
CValidator::createValidator('required',$this->getDynamicVaribleValue($var->name),'')
);
}
我的表格
<div class="clearfix"></div>
<?php
$varform = new DynamicForm();
$varform->attributes = $user->getDynamicFormConfig();
$varform->model_name = 'user';
echo $varform->run();
?>
<div class="clearfix"></div>
<div class="form-actions marginTopHalf marginBotHalf">
<?php
$this->widget('booster.widgets.TbButton', array(
'buttonType' => 'submit',
'context' => 'primary',
'label' => $user->isNewRecord ? 'Sign Up for this event' : 'Save',
));
?>
</div>
查看此链接,希望它能帮助您 我还复制代码并粘贴到下面,这样如果链接不起作用,人们可以从这里阅读并获得帮助 ------从上面的链接复制---------------------------------------------------- 5天前,我收到一位读者的邮件,他在邮件中写道,“我需要通过类属性[“Class=Required”]循环使用Jquery验证html页面,如果标签属性包含“Required”类,那么我应该验证警告用户“请输入您的值”并将焦点设置回null控件以输入值。请在Jquery编码中建议如何做到这一点” 注意:我没有写博客读者的名字,因为我不确定他是否想要他的名字在这里 他有一个HTML表单,上面有姓名、公司、职位、电话和电子邮件等输入。点击提交,他想验证输入内容,其中包含“class=required”。因此,我为他的问题创建了一个演示页面,并将解决方案发送给他
01
$(document).ready(function(){
02
$('#btnSubmit').click(function(){
03
var bSubmit = true;
04
$("label.required").each(function(){
05
var txtAttrb = $(this).attr('for');
06
if(txtAttrb.length > 0)
07
{
08
var txtVal = $("input[id=" + txtAttrb + "]");
09
if(txtVal.val().length == 0)
10
{
11
alert('Please Enter your value');
12
txtVal.focus();
13
bSubmit = false;
14
return false;
15
}
16
}
17
});
18
19
if(bSubmit == true)
20
{
21
//submit the form.
22
}
23
});
24
});
下面是jQuery代码,它解决了他的问题。单击Submit按钮,它将遍历所有具有“.required”类的输入类型。并检查值,如果为空,则显示警报并将焦点设置到文本框
01
$(document).ready(function(){
02
$('#btnSubmit').click(function(){
03
$("input.required").each(function(){
04
if($(this).val().length == 0)
05
{
06
alert('Please Enter your value');
07
$(this).focus();
08
return false;
09
}
10
});
11
//else submit your form.
12
});
13
});
请参阅实时演示和代码
第二天,我收到了他的另一封电子邮件,他说“我需要通过JQuery验证来实现,标签有“class.required”属性而不是标签,那些标签标签有“class.required”属性,只有那些在使用过程中需要验证的,点击comman按钮,这个JQuery脚本应该在整个网站上全局使用。"
所以他的问题是标签标签的类是“required”,而不是输入标签。我向他提供的解决方案假设输入标签具有必需的类,因为他在第一封电子邮件中没有提到标签标签具有“.required”类。在他的下一封电子邮件中,他还向我发送了HTML代码。首先看一下HTML代码。(我还没有把全部代码都写出来。)
请参阅实时演示和代码
希望这对您也有帮助您可以使用jquery验证来执行操作,您的意思是什么?我能/会在模型中声明吗?问题是用户设置这些字段并声明它们是否为必需的,所以我不知道它们的值是什么,或者有多少个字段。cvalidator和添加验证器应该只是将字段值添加到框架javascript验证中。您可以在需要时显示动态表单创建的输入的输出(html)吗?jquery验证插件呢?客户端验证使用任何其他jquery验证插件而不是yii验证…查看两个链接。。。如果你还需要帮助,请告诉我
1
<div class="formField">
2
<label for="txtFullName" class="required">Name</label>
3
<input id="txtFullName" type="text" name="Full_Name" />
4
</div>
01
$(document).ready(function(){
02
$('#btnSubmit').click(function(){
03
var bSubmit = true;
04
$("label.required").each(function(){
05
var txtAttrb = $(this).attr('for');
06
if(txtAttrb.length > 0)
07
{
08
var txtVal = $("input[id=" + txtAttrb + "]");
09
if(txtVal.val().length == 0)
10
{
11
alert('Please Enter your value');
12
txtVal.focus();
13
bSubmit = false;
14
return false;
15
}
16
}
17
});
18
19
if(bSubmit == true)
20
{
21
//submit the form.
22
}
23
});
24
});