Могу ли я настроить функцию yii2 afterAction для возврата моих данных API?

Я работаю над своим API yii2 и искал способ получить данные из действий моего контроллера. Это образец того, что мне нужно в моем ответе в json или xml.

{"success": true,
 "message": {data},
 "session": "U0phRm51az",
 "metadata": "metadata"
}

Я получаю сообщение от контроллера, тогда как успех проверяет, в порядке ли ответ, сеанс - это данные сеанса, а метаданные - другие данные. Мои действия выглядят так.

public function actionIndex(){
    $data = array();
}

Все они используют одни и те же функции, поэтому я не хочу повторяться во всех действиях. Я хотел бы знать, как получить $data от каждого действия, используя событие afterAction или beforeSend компонента ответа в моем классе модуля (не файл конфигурации). Если это невозможно, как я могу этого добиться?


person Zack    schedule 18.09.2015    source источник


Ответы (1)


Если ваши действия возвращают данные в виде массива, вы можете добавить больше данных в этот массив в методе afterAction вашего контроллера.

public function actionIndex()
{
    //...
    //$data contains an array
    return [
        'data' => $data
    ];
}

public function afterAction($action, $result)
{
    $result = parent::afterAction($action, $result);
    $result['session'] = '...';
    $result['metadata'] = '...';
    return $result;
}
person Beowulfenator    schedule 18.09.2015