我正在尝试验证我的表单但没有任何模型。我成功完成了这项工作并且完成了70%。但我被困在一个地方,所以我需要一个小帮助。为此,我创建了一个客户类。
class MyValidator extends CFormModel {
public function __get($name) {
return isset($_POST[$name])?$_POST[$name]:null;
}
static function myValidate( Array $rules ) {
$dummy = new MyValidator();
foreach($rules as $rule) {
if( isset($rule[0],$rule[1]) ) {
$validator = CValidator::createValidator(
$rule[1],
$dummy,
$rule[0],
array_slice($rule,2)
);
$validator->validate($dummy);
}
else { /* throw error; */ }
}
return $dummy;
}
}
现在我在我的控制器中使用这个类,如
$model=MyValidator::myValidate($this->validConfiguration());
if(!$model->hasErrors())
{
file_put_contents($config,$newconfig);
$this->refresh();
}else
{
$this->errors=$model->getErrors();
print_r($this->errors);
$data=(array) json_decode($newconfig);
}
validConfiguration
是一项涵盖规则的功能
public function validConfiguration()
{
return array(
array('guestuser[email], adminEmail, dateformat', 'required'),
array('adminEmail, guestuser[email]', 'email'),
);
}
我的表单字段就像
<div>
<?php echo CHtml::textField('adminEmail',isset($data['adminEmail']) ? $data['adminEmail']: '',array('class'=>'form-control')); ?>
<div class="errorMessage"><?php echo $this->displayerror('adminEmail'); ?></div>
</div>
<div>
<?php echo CHtml::textField('guestuser[email]',isset($data['guestuser']->email) ? $data['guestuser']->email: '',array('class'=>'form-control')); ?>
<div class="errorMessage"><?php echo $this->displayerror('guestuser[email]'); ?></div>
</div>
问题
代码适用于单个元素I adminEmail
defaultpage
但不适用于guestuser[email]
guestuser[password]
这样的代码。