/** * Determine if the block is displayable based on the filter criteria. * * @param BlockEntity $blockEntity * @return boolean */ public function isDisplayable(BlockEntity $blockEntity) { $request = $this->requestStack->getCurrentRequest(); if (null === $request) { return true; } $displayable = true; $filters = $blockEntity->getFilters(); foreach ($filters as $filter) { switch ($filter['attribute']) { case 'query param': $name = $request->query->get($filter['queryParameter']); break; case '_route_params': $params = $request->attributes->get('_route_params'); $name = isset($params[$filter['queryParameter']]) ? $params[$filter['queryParameter']] : 'kjashdhk11111'; // random characters to prevent match break; default: $name = $request->attributes->get($filter['attribute']); } $displayable = $displayable && $this->compare($name, $filter['comparator'], $filter['value']); } // filter for language/locale $language = $blockEntity->getLanguage(); if (!empty($language)) { $displayable = $displayable && $language == $request->getLocale(); } return $displayable; }