예제 #1
0
 public function testDispatchWithNotValidCriteria()
 {
     $request = new Request();
     $response = new Response();
     $criteria = ['some' => 'criteria'];
     $changes = ['key' => 'value'];
     $errors = ['some' => 'error'];
     $request->setCriteria($criteria);
     $request->setChanges($changes);
     $this->criteriaValidator->isValid($criteria)->willReturn(false);
     $this->criteriaValidator->getErrors()->willReturn($errors);
     $this->criteriaValidator->getValid()->willReturn([]);
     $response = $this->controller->dispatch($request, $response);
     $this->assertInstanceOf(Response::class, $response);
     $this->assertNull($response->getResult());
     $this->assertEquals($criteria, $response->getCriteria());
     $this->assertEquals($changes, $response->getChanges());
     $this->assertEquals($errors, $response->getCriteriaErrors());
 }
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     /** @var \Zend\Mvc\Application $app */
     $app = $serviceLocator->get('Application');
     /** @var \Zend\Mvc\Router\Http\RouteMatch $routeMatch */
     $routeMatch = $app->getMvcEvent()->getRouteMatch();
     /** @var \Zend\Http\PhpEnvironment\Request $zendRequest */
     $zendRequest = $serviceLocator->get('request');
     /** @var RequestInterface $request */
     if ($routeMatch->getParam('request')) {
         $request = $serviceLocator->get($routeMatch->getParam('request'));
         if (!$request instanceof RequestInterface) {
             throw new \RuntimeException('Request must be instance of ' . RequestInterface::class);
         }
     } else {
         $request = new Request();
         $routeMatchParams = $routeMatch->getParams();
         unset($routeMatchParams['controller']);
         unset($routeMatchParams['allowedMethods']);
         unset($routeMatchParams['criteriaValidator']);
         unset($routeMatchParams['changesValidator']);
         unset($routeMatchParams['service']);
         unset($routeMatchParams['template']);
         unset($routeMatchParams['viewModel']);
         unset($routeMatchParams['redirectTo']);
         $criteria = array_merge($routeMatchParams, $zendRequest->getQuery()->toArray());
         $request->setCriteria($criteria);
         $changes = [];
         /** @var \Zend\Http\Header\ContentType $contentType */
         $contentType = $zendRequest->getHeaders()->get('contenttype');
         if ($contentType) {
             if ($contentType->getMediaType() == 'multipart/form-data') {
                 $changes = array_merge($zendRequest->getPost()->toArray(), $zendRequest->getFiles()->toArray());
             } elseif ($contentType->getMediaType() == 'application/json') {
                 $changes = array_merge(json_decode($zendRequest->getContent(), true), $zendRequest->getFiles()->toArray());
             }
         }
         $request->setChanges($changes);
     }
     $request->setMethod($zendRequest->getMethod());
     return $request;
 }
예제 #3
0
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     /** @var \Zend\Mvc\Application $app */
     $app = $serviceLocator->get('Application');
     /** @var \Zend\Mvc\Router\Http\RouteMatch $routeMatch */
     $routeMatch = $app->getMvcEvent()->getRouteMatch();
     /** @var \Zend\Http\PhpEnvironment\Request $zendRequest */
     $zendRequest = $serviceLocator->get('request');
     /** @var RequestInterface $request */
     if ($routeMatch->getParam('request')) {
         $request = $serviceLocator->get($routeMatch->getParam('request'));
         if (!$request instanceof RequestInterface) {
             throw new \RuntimeException('Request must be instance of ' . RequestInterface::class);
         }
     } else {
         $request = new Request();
         $routeMatchParams = $routeMatch->getParams();
         $routeMatchCriteria = [];
         if (!empty($routeMatchParams['routeCriteria'])) {
             if (is_string($routeMatchParams['routeCriteria'])) {
                 $routeMatchCriteria[$routeMatchParams['routeCriteria']] = $routeMatchParams[$routeMatchParams['routeCriteria']];
             }
             if (is_array($routeMatchParams['routeCriteria'])) {
                 foreach ($routeMatchParams['routeCriteria'] as $criteria) {
                     if (array_key_exists($criteria, $routeMatchParams)) {
                         $routeMatchCriteria[$criteria] = $routeMatchParams[$criteria];
                     }
                 }
             }
         }
         $criteria = array_merge($routeMatchCriteria, $zendRequest->getQuery()->toArray());
         $request->setCriteria($criteria);
         $changes = array_merge($zendRequest->getPost()->toArray(), $zendRequest->getFiles()->toArray());
         $request->setChanges($changes);
     }
     $request->setMethod($zendRequest->getMethod());
     return $request;
 }