与Yii框架中的验证规则混淆

Wor*_*php 0 yii

我是Yii框架的新手,并且对于在模型内部编写的验证规则存在一些混淆.例如:
array('email','safe'),
array('username,password','required','on'=>'login,register'),

1-什么是安全验证器的使用以及在何处使用它?
2-什么用的上的场景,以及如何使用它?假设我已经'on'=''register',那么'register'是否是动作名称或其他任何东西.

即使经过大量的文件,对我来说仍然不是很清楚.有人可以用例子来解释它.

DCo*_*der 5

什么是安全验证器的使用和在哪里使用它?

safe验证器可用于表示"此字段可以接受任何内容,并且不应执行验证".它在大规模分配期间是相关的:

$model->attributes = $_POST['Model'];
Run Code Online (Sandbox Code Playgroud)

如果该字段没有设置规则,则在此分配后不会更新其值.如果某个字段不需要任何验证,但在这种情况下仍应更新,您可以使用该safe规则来指明这一点(但要小心,验证是一件好事).


什么是场景的使用以及如何使用它?假设我已经'on'=''register',那么'register'是否是动作名称或其他任何东西.

在这种情况下,register是一个场景(您选择的任意字符串,描述模型发生了什么).在执行批量分配和其他工作之前,您可以在控制器中分配模型的场景.当验证模型时,Yii将查看模型的scenario属性并基于此运行验证器.(在一个合理大小的项目中,您将需要使用类常量而不是任意字符串来保持一致性.)

示例:用户密码更改.您可以设置以下验证程序,password仅在此方案中将字段标记为必需,否则:

// validator in the model class
array('password', 'required', 'on' => 'change-password'),

// code in the right controller's action
$user->scenario = 'change-password'; // set the scenario
$user->attributes = $_POST['User'];
$user->validate(); // if the password is not set, this will result in a validation error
Run Code Online (Sandbox Code Playgroud)

请查看此答案以获取更多信息以及进一步阅读的链接.