如何在RESTful Yii2中将属性设置为不安全?

时间:2015-05-21 11:44:48

标签: rest yii2

我在Yii2中有一个控制器,它将ActiveController扩展为RESTful,我可以使用PUT方法更新它。但是我想将一些属性设置为不安全,因为我不希望它们可以更新。

阅读一些不同的例子我认为我可以在模型的规则中做这样的事情:

[['first_name','last_name','!password'], 'safe', 'on' => 'update'],

但是,这并不能防止更新密码。

然后我找到了scenario()方法,并认为这应该有效:

public function scenarios()
{
    return [
        'default' => ['*'], // Also tried without this line
        'update' => ['first_name','last_name','!password'],
    ];
}

但这会阻止所有属性更新。

有没有人有任何其他建议?

1 个答案:

答案 0 :(得分:2)

这条规则只是意味着可以大规模地分配属性(使用Model::load()),但是没有任何验证,也可以在每个场景中。

[['first_name','last_name','password'], 'safe'],

但你也可以在这里使用,例如'string'而不是'safe'。然后它也用于每个场景,但现在使用字符串验证。

通过以下内容,您将介绍一个“更新”方案,并告诉Validation引擎first_name和last_name应该可以大规模分配并进行验证,但不包括密码。就像你预期的那样。

public function scenarios()
{
    return [
        'update' => ['first_name','last_name','!password'],
    ];
}

重要的是,您在调用load()或save()之前在更新或创建(在控制器中)设置方案:

$model = ...
$model->scenario = 'update';
$model->load(...);
$model->save();