Существует несколько способов, я опишу два из них.
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;
}
, а затем проверить сценарий в вашей модели и выполнить соответствующие действия. Надеюсь, это поможет
Я должен был уточнить и упомянуть, что контроллер расширяет ActiveController. В этом случае я не определяю никаких действий и поэтому не могу установить сценарий. – Dubby
Спасибо, точка 1 именно то, что я искал. – Dubby