/** * Creates a request based on a query instance * * @throws UnexpectedValueException * @param QueryInterface $query * @return Request */ public function createRequest(QueryInterface $query) { $event = new PreCreateRequestEvent($query); $this->eventDispatcher->dispatch(Events::PRE_CREATE_REQUEST, $event); if ($event->getRequest() !== null) { return $event->getRequest(); } $requestBuilder = $query->getRequestBuilder(); if (!$requestBuilder || !$requestBuilder instanceof RequestBuilderInterface) { throw new UnexpectedValueException('No requestbuilder returned by querytype: ' . $query->getType()); } $request = $requestBuilder->build($query); $this->eventDispatcher->dispatch(Events::POST_CREATE_REQUEST, new PostCreateRequestEvent($query, $request)); return $request; }