/**
* Handle the page requests
*
* @param Request $request The request
* @param string $url The url
* @param bool $preview Show in preview mode
*
* @throws NotFoundHttpException
* @throws AccessDeniedException
*
* @return Response|array
*/
public function slugAction(Request $request, $url = null, $preview = false)
{
/* @var EntityManager $em */
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
/* @var NodeTranslation $nodeTranslation */
$nodeTranslation = $request->attributes->get('_nodeTranslation');
// If no node translation -> 404
if (!$nodeTranslation) {
throw $this->createNotFoundException('No page found for slug ' . $url);
}
$entity = $this->getPageEntity($request, $preview, $em, $nodeTranslation);
$node = $nodeTranslation->getNode();
$securityEvent = new SlugSecurityEvent();
$securityEvent->setNode($node)->setEntity($entity)->setRequest($request)->setNodeTranslation($nodeTranslation);
$nodeMenu = $this->container->get('kunstmaan_node.node_menu');
$nodeMenu->setLocale($locale);
$nodeMenu->setCurrentNode($node);
$nodeMenu->setIncludeOffline($preview);
$eventDispatcher = $this->get('event_dispatcher');
$eventDispatcher->dispatch(Events::SLUG_SECURITY, $securityEvent);
//render page
$renderContext = new RenderContext(array('nodetranslation' => $nodeTranslation, 'slug' => $url, 'page' => $entity, 'resource' => $entity, 'nodemenu' => $nodeMenu));
if (method_exists($entity, 'getDefaultView')) {
/** @noinspection PhpUndefinedMethodInspection */
$renderContext->setView($entity->getDefaultView());
}
$preEvent = new SlugEvent(null, $renderContext);
$eventDispatcher->dispatch(Events::PRE_SLUG_ACTION, $preEvent);
$renderContext = $preEvent->getRenderContext();
/** @noinspection PhpUndefinedMethodInspection */
$response = $entity->service($this->container, $request, $renderContext);
$postEvent = new SlugEvent($response, $renderContext);
$eventDispatcher->dispatch(Events::POST_SLUG_ACTION, $postEvent);
$response = $postEvent->getResponse();
$renderContext = $postEvent->getRenderContext();
if ($response instanceof Response) {
return $response;
}
$view = $renderContext->getView();
if (empty($view)) {
throw $this->createNotFoundException('No page found for slug ' . $url);
}
$template = new Template(array());
$template->setTemplate($view);
$request->attributes->set('_template', $template);
return $renderContext->getArrayCopy();
}