/** * Creates and returns the table view. * * @param Request $request * @throws RuntimeException * @return TableView */ public function createView(Request $request = null) { if (null !== $request) { $this->requestHelper->setRequest($request); } $view = new TableView(); $view->name = $this->getName(); $view->options = ['selector' => $this->config->getSelector()]; $view->selection_form = $this->config->getSelector(); if (!$this->config->hasColumns()) { throw new RuntimeException('Table has no columns and cannot be generated.'); } $class = $this->config->getDataClass(); $alias = strtolower(substr($class, strrpos($class, '\\') + 1, 1)); // TODO What if data is already set ? $queryBuilder = $this->entityManager->createQueryBuilder()->select($alias)->from($this->config->getDataClass(), $alias); if (null !== ($customizeQb = $this->config->getCustomizeQb())) { $customizeQb($queryBuilder, $alias); } $this->generateFilters($queryBuilder, $view); $this->generateColumns($queryBuilder, $view); $currentPage = $this->requestHelper->getVar($this->getName() . '_page', 1); /*$dql = $queryBuilder->getQuery()->getDQL(); var_dump($dql); exit();*/ $adapter = new DoctrineORMAdapter($queryBuilder); $pager = new Pagerfanta($adapter); $pager->setNormalizeOutOfRangePages(true)->setMaxPerPage($this->config->getMaxPerPage())->setCurrentPage($currentPage); $this->setData($pager->getCurrentPageResults()); if ($currentPage != $pager->getCurrentPage()) { $this->requestHelper->setVar($this->getName() . '_page', $pager->getCurrentPage()); } $view->pager = $pager; $this->generateCells($view); return $view; }