0

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

ответ

1

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

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

$parameters является экземпляром Zend\Stdlib\Parameters.

+0

Пожалуйста, прочитайте мое сообщение еще раз. Я уже делаю то же самое, и он не работает. В 'PortController', который я отправил, когда я получаю запрос внутри контроллера, поле' subsystem' будет пустым. Но теперь я тестирую и обновляю свой вопрос. –

+0

Возможно, что «обычные» * ZF2 * решения не работают для Apigility, так как происходит гораздо больше. Вы должны обязательно упомянуть об использовании Apigility в своих будущих вопросах.Apigility добавляет много дополнительной логики в обычный процесс запроса ZF2. – Wilt

+0

Исправлено. Спасибо. –