Я использую плагин прямо в тестировании и производительности. Сначала данные IndexController
проходят через обычный запрос POST. Там я получаю данные requst и POST, и мне нужно добавить еще один параметр.ZF2: Как изменить объект запроса глобально для всех контроллеров при использовании плагина?
$this->getRequest()->getPost()->subsystem = 'avia';
Чем я использую плагин вперед
$result = $this->forward()->dispatch(
"Port\\Controller",
[
'controller' => 'Port\\Controller',
'action' => 'port',
]
);
И Whan я в этом PortController
я хотел бы получить мои данные запроса POST снова, и она должна содержать мои изменения от IndexController
$post = $this->getRequest()->getPost();
isset($post['subsystem']) //true
Но это не так. Он получает объект запроса без изменений.
isset($post['subsystem']) //FALSE
Как изменить запрос глобально для всех контроллеров в текущем запросе?
Что я уже пытаюсь?
//#1
$params = $this->getServiceLocator()->get('ControllerPluginManager')->get('params');
$params->getController()->getRequest()
->getPost()->subsystem
= 'avia';
//#2
$this->getRequest()->getPost()->subsystem = 'avia';
//#3
$post = $this->getRequest()->getPost();
$post['subsystem'] = 'avia';
//NEED UPDATE GLOBALLY !
$this->getRequest()->setPost($post);
//#4
$event = $this->getEvent();
$event->getRequest()->getPost()->subsystem = 'avia';
Debug::vars($event->getRequest()->getPost());
//#5
$_POST = $post->toArray();
И все эти отклонения не работают.
Я уже прочитал этот ответ ZF2: How to pass parameters to forward plugin which I can then get in the method I forward them to?
Но я не хочу, данные проходят через Params, мне нужно изменить запрос.
UPD
Но теперь я испытано и, может быть, это потому, что на стороне приемника я пытался получить этот запрос на путь
$request = $this->bodyParams();
Но я должен использовать его как это
if (!$request['subsystem']) {
$request = $this->getRequest()->getPost()->toArray();
}
Это было потому, что я использовал службу RPC Apigility и разместил данные post в формате JSON в поле Request Content, а не в POST. И в другом месте, где я пытался получить его
$params = $this->serviceLocator->get('ControllerPluginManager')->get('params');
$requestContent = $params->getController()->getRequest()->getContent();
$request = Json::decode($requestContent, Json::TYPE_ARRAY);
Но после того, как я начал использовать POST, и именно поэтому он начал путать.
Пожалуйста, прочитайте мое сообщение еще раз. Я уже делаю то же самое, и он не работает. В 'PortController', который я отправил, когда я получаю запрос внутри контроллера, поле' subsystem' будет пустым. Но теперь я тестирую и обновляю свой вопрос. –
Возможно, что «обычные» * ZF2 * решения не работают для Apigility, так как происходит гораздо больше. Вы должны обязательно упомянуть об использовании Apigility в своих будущих вопросах.Apigility добавляет много дополнительной логики в обычный процесс запроса ZF2. – Wilt
Исправлено. Спасибо. –