Yii2:我可以使用场景为不同的动作指定不同的模型字段集吗?

Fla*_*Moe 5 yii2 yii2-advanced-app yii2-model

我可以在Yii2模型页面(http://www.yiiframework.com/doc-2.0/yii-base-model.html)中看到,在"字段"部分中,您可以根据某些字段设置"不同的字段列表"上下文信息.例如,根据$ scenario或当前应用程序用户的权限,您可以返回不同的可见字段集或过滤掉某些字段."

但是,场景文档(http://www.yiiframework.com/doc-2.0/guide-structure-models.html#scenarios)表示场景用于为模型属性验证创建不同的上下文.

我正在使用Yii2 Restful API,我必须使用默认操作(actionIndex,actionView,...)从模型中获取数据并显示为API结果.我知道我可以覆盖那些方法(http://www.yiiframework.com/doc-2.0/guide-rest-controllers.html#extending-active-controller),但我怎么能说在那些方法中使用不同的方法字段(取决于不同的场景)?

我需要的是为actionIndex(项目列表)输出field1,field2,field3,但我想为actionView(项目列表)输出field1,field2,field3,field4.

Beo*_*tor 6

你在你的模型中这样做。

Yii2 中的默认 REST 实现将仅包含该方法返回的属性fields()。默认情况下,该方法返回所有属性。因此,您可以这样定义它:

class MyModel extends ActiveRecord
{
    //...
    public function fields()
    {
        switch ($this->scenario) {
            case 'my_scenario_1':
                return ['field1', 'field2'];
            case 'my_scenario_2':
                return ['field3', 'field4'];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,您还可以使用该scenarios()方法,该方法返回给定场景的所有活动属性。

不要忘记在控制器中设置模型的场景。