/** * @param GridInterface|string $grid * * @return $this * * @throws \Exception */ public function create($grid) { if ($grid instanceof GridCollection) { $this->collection = $grid; $activeGrid = $this->request->query->get('grid'); $this->collection->setActive($activeGrid); $grid = $this->collection->getGrid($activeGrid)['grid']; } if (is_string($grid)) { $grid = $this->container->get($grid); } if (!$grid instanceof GridInterface) { throw new \Exception('Grid needs to implement GridInterface'); } $this->entity = $grid; $source = $grid->getSource(); $this->filters = new Filters($this->request->get('filter')); $grid->getFilters($this->filters); $searchString = $this->request->get('search'); $source->manipulateQuery(function (QueryBuilder $queryBuilder) use($grid, $searchString) { if ($this->filters->isFilterActive()) { $filter = $this->filters->getActiveFilter(); $filter($queryBuilder); } if (!empty($searchString)) { $this->searchString = $searchString; $grid->search($queryBuilder, $searchString); } }); // Attach the source to the grid $this->setSource($source); $grid->getRowActions($collection = new Collection()); if (!$collection->isEmpty()) { $actionsRow = $this->getActionColumn($collection); $this->addColumn($actionsRow, 100); } $massActions = $grid->getMassActions(); array_walk($massActions, array($this, 'addMassAction')); $this->createHash(); $requestData = $this->request->get($this->getHash()); if (1 === count($requestData) && isset($requestData[self::REQUEST_QUERY_MASS_ACTION_ALL_KEYS_SELECTED]) && $requestData[self::REQUEST_QUERY_MASS_ACTION_ALL_KEYS_SELECTED] === '0') { $this->request->request->remove($this->getHash()); } return $this; }