我是Yii框架的新手。我正在为我的应用程序使用Yii框架。现在,数据是从XML文件中提取的,而不是从数据库中提取的。输入到textfield的数据也会转换为XML文件。模型类扩展了CFormModel。我有一个应该只允许整数的文本字段。我使用Javascript进行了前端验证,适用于某些浏览器但不是大多数。所以,我想使用rules()进行后端验证。如何为此编写验证规则以允许整数 的修改
if (isset($_GET['TestForm']['min']) && isset($_GET['TestForm']['max'])) {
$test = $xml->addChild('test');
$test->addChild('min', $_GET['TestForm']['min']?$_GET['TestForm']['min']:"0");
$test->addChild('max', $_GET['TestForm']['max']?$_GET['TestForm']['max']:"500000000");
} else {
$test = $xml->addChild('area');
$test->addChild('min', 0);
$test->addChild('max', 5000000);
}
编辑2 simplexml_load_string解析器错误是显示的警告
答案 0 :(得分:1)
在你的模型中 假设modelname是 file.php * 创建变量 *
public $name;
public function rules()
{
return array(
array('name','numerical', 'integerOnly' => true)
);
}
在视图中创建表单
这里 $ model 是对象
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name'); ?>
<?php echo $form->error($model,'name'); ?>
</div>
答案 1 :(得分:1)
这应该做的工作
模型/ yourformmodel.php:
public function rules() {
return array(
array('field', 'required'),
array('field', 'numerical', 'integerOnly' => true),
);
}
答案 2 :(得分:0)
这是很好的文档。刚看完......
答案 3 :(得分:0)
首先是设置:
您有一个经典问题,您想要验证用户是否接受了合同条款,但接受的值未存储(绑定)在数据库中...所以您扩展CFormModle,定义规则并开始验证。使用绑定变量,您将其验证为保存的一部分。现在您自己验证()但Validate需要一个未在CFormModel中定义的属性列表。所以你会怎么做?你这样做:
<强> $合约─&GT;验证($合约─&GT; attributeNames()) 强>
以下是完整的示例:
class Contract extends CFormModel
{
...
public $agree = false;
...
public function rules()
{
return array(
array('agree', 'required', 'requiredValue' => 1, 'message' => 'You must accept term to use our service'),
);
}
public function attributeLabels()
{
return array(
'agree'=>' I accept the contract terms'
);
}
}
然后在控制器中执行此操作:
public function actionAgree(){
$contract = new Contract;
if(isset($_POST['Contract'])){
//$contract->attributes=$_POST['Contract']; //contract attributes not defined in CFormModel
...
$contract->agree = $_POST['Contract']['agree'];
...
}
if(!$contract->validate($contract->attributeNames())){
//re-render the form here and it will show up with validation errors marked!
}