/**
  * @Route("/ajax/bookmark/create", name="ajax_create_bookmark")
  */
 public function ajaxCreateAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $repository = $em->getRepository('AppBundle:Bookmark');
     $tagRepository = $em->getRepository('AppBundle:Tag');
     $openGraph = $this->container->get('open_graph');
     $url = $request->request->get('url');
     $tags = $request->request->get('tags');
     $user = $this->get('security.context')->getToken()->getUser();
     if (!$url) {
         $data = array('error' => 'invalid_url', 'errorMsg' => 'URL is required');
         $json = \json_encode($data);
         $response = new Response($json, 404);
         $response->headers->set('Content-Type', 'application/json');
         return $response;
     }
     $tags = explode(',', $tags);
     try {
         $data = $openGraph->read($url);
     } catch (RequestException $e) {
         $context = $e->getHandlerContext();
         $data = array('error' => 'invalid_url');
         if (isset($context['error'])) {
             $data['errorMsg'] = $context['error'];
         }
         $json = \json_encode($data);
         $response = new Response($json, 404);
         $response->headers->set('Content-Type', 'application/json');
         return $response;
     } catch (ConnectException $e) {
         $data = array('error' => 'invalid_page', 'exception' => $e->getMessage());
         $json = \json_encode($data);
         $response = new Response($json, 404);
         $response->headers->set('Content-Type', 'application/json');
         return $response;
     } catch (\Exception $e) {
         $data = array('error' => 'exception', 'exception' => $e->getMessage());
         $json = \json_encode($data);
         $response = new Response($json, 500);
         $response->headers->set('Content-Type', 'application/json');
         return $response;
     }
     $title = $data['title'];
     $description = $data['description'];
     if (isset($data['og:title']) && $data['og:title']) {
         $title = $data['og:title'];
     }
     if (isset($data['og:description']) && $data['og:description']) {
         $description = $data['og:description'];
     }
     $bookmark = new Bookmark();
     $bookmark->setUrl($url);
     $bookmark->setTitle($title);
     $bookmark->setUser($user);
     $bookmark->setDescription($description);
     if (isset($data['og:image'])) {
         $bookmark->setImage($data['og:image']);
     }
     $bookmarkTags = array();
     foreach ($tags as $tagName) {
         $tag = new Tag();
         $tag->setName($tagName);
         $tag->setUser($user);
         $em->persist($tag);
         $bookmarkTags[] = $tag;
     }
     $bookmark->setTags($bookmarkTags);
     $em->persist($bookmark);
     $em->flush();
     $normalizer = new ObjectNormalizer();
     $normalizer->setCircularReferenceHandler(function ($object) {
         return $object->getId();
     });
     $json = \json_encode($bookmark);
     $response = new Response($json);
     $response->headers->set('Content-Type', 'application/json');
     return $response;
 }