report = $report; } /** * Set the error mode. * * @param bool $mode * @return self */ public function setErrorMode($mode) { $this->strict = $mode; return $this; } /** * Set the profiler event object. * * @param EventInterface $event * @return self */ public function setEvent(EventInterface $event) { $this->event = $event; return $this; } /** * Returns the profiler event object. * * @return ProfilerEvent */ public function getEvent() { if (! isset($this->event)) { $this->event = new ProfilerEvent(); $this->event->setTarget($this); $this->event->setProfiler($this); } return $this->event; } /** * Set the event manager instance * * @param EventManagerInterface $eventManager * @return self */ public function setEventManager(EventManagerInterface $eventManager) { $eventManager->addIdentifiers([__CLASS__, get_called_class(), 'profiler']); $this->eventManager = $eventManager; return $this; } /** * Get the event manager instance * * @return EventManagerInterface */ public function getEventManager() { return $this->eventManager; } /** * Adds a collector. * * @param Collector\CollectorInterface $collector * @return self * @throws Exception\CollectorException */ public function addCollector($collector) { if (! isset($this->collectors)) { $this->collectors = new PriorityQueue(); } if ($collector instanceof Collector\CollectorInterface) { $this->collectors->insert($collector, $collector->getPriority()); return $this; } $error = sprintf('%s must implement CollectorInterface.', get_class($collector)); if ($this->strict === true) { throw new Exception\CollectorException($error); } $this->report->addError($error); return $this; } /** * Runs all collectors. * * @triggers ProfilerEvent::EVENT_COLLECTED * @param MvcEvent $mvcEvent * @return Profiler * @throws Exception\ProfilerException */ public function collect(MvcEvent $mvcEvent) { $this->report->setToken(uniqid('zdt')) ->setUri($mvcEvent->getRequest()->getUriString()) ->setMethod($mvcEvent->getRequest()->getMethod()) ->setTime(new DateTime('now', new DateTimeZone('UTC'))) ->setIp($mvcEvent->getRequest()->getServer()->get('REMOTE_ADDR')); if (isset($this->collectors)) { foreach ($this->collectors as $collector) { $collector->collect($mvcEvent); $this->report->addCollector($collector); } $event = $this->getEvent(); $event->setName(ProfilerEvent::EVENT_COLLECTED); $this->eventManager->triggerEvent($event); return $this; } if ($this->strict === true) { throw new Exception\ProfilerException('There is nothing to collect.'); } $this->report->addError('There is nothing to collect.'); return $this; } }