我正在Yii2中构建一个RESTful应用程序,我已经覆盖了模型中的fields()方法(扩展ActiveRecord),但我想根据请求是视图还是列表来定义要返回的字段。
通过在actions方法中转储$actions变量,可以很容易地在控制器中检查哪个RESTful操作正在使用。如何在模型中执行类似操作?我试着检查场景,但它当然是default
。
有几种方法,我将描述其中的两种。
1) 非常简单:在模型的fields()
方法中调用'Yii::$app->controller->action->uniqueId
来确定使用哪个操作。
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;
}
然后在您的模型中检查场景并执行适当的操作。希望这将有助于