ZF2: Как изменить объект запроса глобально для всех контроллеров при использовании плагина forward?

Я использую плагин 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, и поэтому он начал путаться.

0

Решение

Я не уверен, что это действительно то, что вы должны сделать, но я думаю, что вы должны быть в состоянии достичь этого следующим образом:

$parameters = $this->getRequest()->getPost();
$parameters->set('subsystem', 'avia');

$parameters это пример Zend\Stdlib\Parameters,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]