Yii - 如何为CFormModel编写验证规则

时间:2013-12-06 09:25:11

标签: php yii

我是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解析器错误是显示的警告

4 个答案:

答案 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)

这是很好的文档。刚看完......

http://www.yiiframework.com/wiki/56/

答案 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!
    }   

enter image description here enter image description here