Я использую плагин forward в целях тестирования и производительности.
Вначале IndexController
данные проходят через обычный запрос POST.
Там я получаю данные запроса и POST и мне нужно добавить еще один параметр.
$this->getRequest()->getPost()->subsystem = 'avia';
Чем я использую форвард плагин
$result = $this->forward()->dispatch(
"Port\\Controller",
[
'controller' => 'Port\\Controller',
'action' => 'port',
]
);
И чем я в этом занимаюсь? 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: Как передать параметры в плагин forward, который я затем могу получить в методе, которому я их перенаправляю?
Но я не хочу передавать данные через параметры, мне нужен запрос на изменение.
UPD
Но теперь я проверен и, возможно, это было потому, что на стороне получателя я пытался получить запрос таким образом
$request = $this->bodyParams();
Но я должен использовать это так
if (!$request['subsystem']) {
$request = $this->getRequest()->getPost()->toArray();
}
Это потому, что я использовал RPC-сервис Apigility и поместил данные постов в формате JSON в поле «Запросить содержимое», а не в POST. И в другом месте я пытался получить его
$params = $this->serviceLocator->get('ControllerPluginManager')->get('params');
$requestContent = $params->getController()->getRequest()->getContent();
$request = Json::decode($requestContent, Json::TYPE_ARRAY);
Но после того, как я начал использовать POST, и поэтому он начал путаться.
Я не уверен, что это действительно то, что вы должны сделать, но я думаю, что вы должны быть в состоянии достичь этого следующим образом:
$parameters = $this->getRequest()->getPost();
$parameters->set('subsystem', 'avia');
$parameters
это пример Zend\Stdlib\Parameters
,
Других решений пока нет …