public function handle(RequestConfiguration $requestConfiguration, View $view) { if ($view->getResponse()->getContent()) { return $view->getResponse(); } return parent::handle($requestConfiguration, $view); }
/** * Sign in users by pair username:password. * * @ApiDoc( * views={"default", "user"}, * section="Security API", * resource=true, * resourceDescription="Sign in users by pair username:password.", * statusCodes={ * 200="Returned when successful", * 400="Returned when an error has occurred", * } * ) * * @Rest\Route("/sign-in", requirements={ * "_format": "json|xml" * }) * * @Rest\RequestParam(name="username", requirements="[\w\-]+", nullable=false, description="Username") * @Rest\RequestParam(name="password", nullable=false, description="Password") * * @param ParamFetcherInterface $paramFetcher * @return View */ public function postUserSignInAction(ParamFetcherInterface $paramFetcher) { $username = $paramFetcher->get('username'); $password = $paramFetcher->get('password'); /** @var EntityRepository $repository */ $repository = $this->getDoctrine()->getManager()->getRepository('UserBundle:User'); /** @var User $user */ $user = $repository->findOneBy(['username' => $username]); if (!$user || !$this->validatePassword($user, $password)) { return new View(array('message' => 'User not found.'), 400); } if (!$user->isEnabled()) { return new View(array('message' => 'Account is disabled.'), 400); } if (!$user->isAccountNonLocked()) { return new View(array('message' => 'Account is locked.'), 400); } if (!$user->isAccountNonExpired()) { return new View(array('message' => 'Account is expired.'), 400); } if (!$user->isCredentialsNonExpired()) { return new View(array('message' => 'Credentials is expired.'), 400); } $this->generateToken($user); $this->getDoctrine()->getManager()->flush(); $headers = array('Token' => $user->getApiToken(), 'ExpireAt' => $user->getApiTokenExpireAt()->format('c'), 'Username' => $user->getUsername()); $view = new View(array_merge(array('user' => $user->getId()), $headers), 200, $headers); $this->setAuthInfoInCookie($headers, $view->getResponse(), $user->getApiTokenExpireAt()); return $view; }
/** * @param ViewHandler $handler * @param View $view * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function createResponse(ViewHandler $handler, View $view, Request $request) { $format = $view->getFormat() ?: $request->getRequestFormat(); $data = $view->getData(); if ($data instanceof Cursor) { $view->setData(iterator_to_array($data, false)); $view->getResponse()->headers->set('X-Total-Count', $data->count()); return $handler->createResponse($view, $request, $view->getFormat()); } if ($data instanceof Form && Codes::HTTP_BAD_REQUEST === $view->getStatusCode()) { $view->setData($this->formatFormErrors($data)); return $handler->createResponse($view, $request, $format); } return $handler->createResponse($view, $request, $format); }
/** * Create the Response from the view * * @param View $view * @param string $location * @param string $format * * @return Response */ public function createRedirectResponse(View $view, $location, $format) { $content = null; $response = $view->getResponse(); if ('html' === $format && isset($this->forceRedirects[$format])) { $redirect = new RedirectResponse($location); $content = $redirect->getContent(); $response->setContent($content); } $code = isset($this->forceRedirects[$format]) ? $this->forceRedirects[$format] : $this->getStatusCode($view, $content); $response->setStatusCode($code); $response->headers->set('Location', $location); return $response; }
/** * @param Response $response * @param ParameterBag $parameterBag * @return bool|void */ protected function doExecute(Response $response, ParameterBag $parameterBag) { /** @var Request $request */ /** @var AbstractType $formType */ /** @var object $entity */ /** @var bool $cleanForm */ /** @var bool $cleanRequestData */ /** @var bool $getContent */ /** @var array $formOptions */ /** @var SerializationContext $serializationContext */ /** @var \Closure $onPreValidation */ /** @var \Closure $onPostValidation */ /** @var \Closure $onPostPersist */ /** @var \Closure $onSuccess */ /** @var \Closure $onFailure */ $request = $parameterBag->get('request'); $formType = $parameterBag->get('formType'); $entity = $parameterBag->get('entity'); $cleanForm = $parameterBag->get('cleanForm'); $cleanRequestData = $parameterBag->get('cleanRequestData', true); $getContent = $parameterBag->get('getContent'); $formOptions = $parameterBag->get('formOptions', array()); $serializationContext = $parameterBag->get('serializationContext'); $onPreValidation = $parameterBag->get('onPreValidation'); $onPostValidation = $parameterBag->get('onPostValidation'); $onPostPersist = $parameterBag->get('onPostPersist'); $onSuccess = $parameterBag->get('onSuccess'); $onFailure = $parameterBag->get('onFailure '); $view = new View(); $httpResponse = $view->getResponse(); $requestData = array_merge($request->request->all(), $request->files->all()); if ($serializationContext) { $view->setSerializationContext($serializationContext); } $form = $this->getFormFactory()->createNamed(null, get_class($formType), $entity, array_merge(array('csrf_protection' => false), $formOptions)); if ($cleanRequestData) { $requestData = $this->cleanRequestData($requestData, $form); } if ($cleanForm) { $this->cleanForm($requestData, $form); } $this->prepareFormCollections($request, $form); /** * Pre validation */ $this->onPreValidation($request, $form, $entity, $httpResponse); if ($onPreValidation instanceof \Closure) { $onPreValidation($request, $form, $entity, $httpResponse); } if ($httpResponse->getStatusCode() != HttpResponse::HTTP_OK) { $response->response = $view; return true; } $form->submit($requestData); if ($form->isValid()) { if ($onPostValidation instanceof \Closure) { $onPostValidation($request, $form, $entity, $httpResponse); if ($httpResponse->getStatusCode() != HttpResponse::HTTP_OK) { $response->response = $view; return true; } } $isEditAction = $entity->getId(); $statusCode = $isEditAction ? HttpResponse::HTTP_OK : HttpResponse::HTTP_CREATED; /** @var \Doctrine\Common\Persistence\ObjectManager $em */ $em = $this->getDoctrine()->getManager(); $em->persist($entity); if ($onPostPersist instanceof \Closure) { $onPostPersist($request, $form, $entity, $httpResponse); } $em->flush(); $httpResponse->setStatusCode($statusCode); if ($isEditAction) { if ($getContent) { $em->refresh($entity); $view->setData($entity); } } else { $view->setData($entity->getId()); } if ($onSuccess instanceof \Closure) { $onSuccess($request, $form, $entity, $httpResponse); } $response->response = $view; return true; } if ($onFailure instanceof \Closure) { $onFailure($request, $form, $entity, $httpResponse); $response->response = $view; return true; } $response->response = $form; return false; }
public function testGetStatusCodeFromResponse() { $view = new View(); $this->assertNull($view->getStatusCode()); $this->assertEquals(Response::HTTP_OK, $view->getResponse()->getStatusCode()); // default code of the response. }