安全验证器的用途是什么以及在哪里使用它?
safe
验证器可用于指示“此字段可以接受任何内容,并且不应执行验证”。它在批量分配期间是相关的:
$model->attributes = $_POST['Model'];
如果该字段没有设置规则,则在此分配后其值将不会更新。如果一个字段不需要任何验证,但在这种情况下仍应更新,您可以使用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
Look at this answer for some more information and links to further reading.