/** * Creates datagrid and triggers event after initialization * * @param DataGridInterface $datagrid * * @return DataGridInterface */ public function create(DataGridInterface $datagrid) { $datagrid->init(); $eventName = $this->getInitEventName($datagrid->getIdentifier()); $event = new DataGridEvent($datagrid); $this->getDispatcher()->dispatch($eventName, $event); return $event->getDataGrid(); }
/** * {@inheritdoc} */ public function loadResults(Request $request) { $this->columns = $this->dataGrid->getColumns(); $queryBuilder = $this->dataGrid->getDataGridQueryBuilder(); // quickest way to automatically bind current locale QB without injecting // whole container in repository or fighting with request-scope issues if ($this->hasLocalePlaceholder($queryBuilder->getDQL())) { $queryBuilder->setParameter('locale', $request->getLocale()); } $orderBy = $this->columns->get($this->orderBy)->getSource(); $paginatorQuery = clone $queryBuilder; $paginator = new Paginator($paginatorQuery->getQuery(), $fetchJoinCollection = true); $total = $paginator->count(); $queryBuilder->addOrderBy($orderBy, $this->orderDir); $queryBuilder->select($this->getSelectClause()); $queryBuilder->setFirstResult($this->offset); $queryBuilder->setMaxResults($this->limit); $query = $queryBuilder->getQuery(); $query->useResultCache(true, 3600, $this->dataGrid->getIdentifier()); $result = $query->getArrayResult(); return ['data_id' => $this->requestId, 'rows_num' => $total, 'starting_from' => $this->offset, 'total' => $total, 'filtered' => $total, 'rows' => $this->processResults($result)]; }