如何根据RESTful操作返回字段?

时间:2015-06-25 05:53:44

标签: php rest yii yii2

我正在Yii2中构建一个RESTful应用程序,我已经覆盖了模型中的fields()方法(扩展了ActiveRecord),但我想根据请求是视图还是列表来定义要返回的字段。

通过在actions方法中转储$ actions变量,可以很容易地检查控制器正在使用哪个RESTful操作。我怎样才能在模型中做类似的事情?我尝试检查方案,但当然是default

1 个答案:

答案 0 :(得分:2)

有几种方法,我将描述其中两种。

1)非常简单明了:在模型\Yii::$app->controller->action->uniqueId方法中调用fields()以确定使用了哪种操作。

2)根据您的评论, ActionController actions方法中定义其操作,该方法返回操作数组及其配置,例如:对于查看操作:

'view' => [
    'class' => 'yii\rest\ViewAction',
    'modelClass' => $this->modelClass,
    'checkAccess' => [$this, 'checkAccess'],
],

所以在您的子控制器中,您可以覆盖父实现并为每个操作设置操作类,如下所示:

public function actions()
{
    $myActions = [
        'view' => [
            'class' => 'app\actions\MyViewAction',
        ]
    ];
    return ArrayHelper::merge(parent::actions(), $myActions);
}

此处app\actions\MyViewAction是您的自定义操作类,您可以从yii\rest\Action继承并覆盖run()方法。

public function run($id)
{
    $model = $this->findModel($id);
    if ($this->checkAccess) {
        call_user_func($this->checkAccess, $this->id, $model);
    }
    $model->scenario = 'view';
    return $model;
}

然后检查模型中的方案并执行适当的操作。希望这会有所帮助