/** * {@inheritdoc} */ public function handleIndexClient(IndexClientInterface $client, $persist = false) { $this->links = []; $this->errors = []; while ($urls = $client->getNextIndexUrls()) { foreach ($urls as $url) { $link = new Link(); $link->setUrl($url); $this->links[] = $link; if ($persist) { $this->persistLink($link); } } } return $this->links; }
/** * Persist/sabe link to db * * @param \Nz\CrawlerBundle\Model\LinkInterface $link Link entity */ protected function persistLink(Link $link) { $em = $this->getEntityManager(); if (null !== $link->getId()) { $em->merge($link); } else { $em->persist($link); } try { $em->flush(); return true; } catch (UniqueConstraintViolationException $ex) { $this->errors[] = array_pop($this->links); $link->setNote('duplicate_link_url', sprintf('Duplicate link url: %s', $link->getUrl())); return false; } }