/** * Execute a batch create operation. * * @param Request $request * @param null|AdapterInterface $adapter Custom adapter * @return Response */ protected function executeBatchCreate(Request $request, AdapterInterface $adapter) { $t = $this->getTranslator(); if (!is_array($request->getContent())) { throw new Exception\BadRequestException($t->translate('Invalid batch operation request data.')); } // Create a simulated request for individual create events. $createRequest = new Request(Request::CREATE, $request->getResource()); // Trigger the create.pre event for every resource. foreach ($request->getContent() as $content) { $createRequest->setContent($content); $createEvent = new Event(Event::API_CREATE_PRE, $adapter, ['request' => $createRequest]); $adapter->getEventManager()->trigger($createEvent); } $response = $adapter->batchCreate($request); // Do not trigger create.post events if an error has occured or if the // response does not return valid content. if ($response->isError() || !is_array($response->getContent())) { return $response; } // Trigger the create.post event for every created resource. foreach ($response->getContent() as $resource) { $createRequest->setContent($resource); $createEvent = new Event(Event::API_CREATE_POST, $adapter, ['request' => $createRequest, 'response' => new Response($resource)]); $adapter->getEventManager()->trigger($createEvent); } return $response; }