<?php
/**
* Page Controller
*
* @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
*/
namespace VisualMedia\PageBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use VisualMedia\LisaBundle\Component\ManagerData;
use VisualMedia\LisaBundle\Component\Interfaces\EntityInterface;
use VisualMedia\LisaBundle\Controller\BaseController;
use VisualMedia\PageBundle\Entity\BasePage;
use VisualMedia\PageBundle\Manager\BasePageManager;
use VisualMedia\PageBundle\Service\PageLayoutProvider;
use VisualMedia\TranslationBundle\Service\ChannelProvider;
use VisualMedia\BartPageBundle\Controller\PageController as BartPageController;
/**
* Page Controller
*/
class PageController extends BaseController
{
/**
* @param Request $request
* @return Response
*/
public function homeAction(Request $request): Response
{
$translator = $this->get('translator');
$pageLayoutProvider = $this->get(PageLayoutProvider::getServiceId());
$pageManager = $this->get(BasePageManager::class);
$title = $translator->trans(sprintf('%s.title', ManagePageController::KEY), [], 'pages');
$page = $pageManager->getOrCreatePage(ManagePageController::KEY, [
'title' => $title,
'published' => true,
'indexable' => true,
'browserTitle' => $title,
'metaDescription' => sprintf('%s.', $title),
'layout' => 'home',
]);
if($page->components){
return $this->forward("VisualMedia\BartPageBundle\Controller\PageController::homeAction",[
"request" => $request,
]);
}
return $this->render($pageLayoutProvider->getLayout($page->getLayout()), [
'browser_title' => $page->browserTitle,
'meta_description' => $page->metaDescription,
'meta_keywords' => $page->metaKeywords,
'indexable' => $page->indexable,
'page' => $page,
]);
}
/**
* @param Request $request
* @param string $slug
* @return Response
*/
public function viewBySlugAction(Request $request, string $slug = null, EntityInterface $page = null): Response
{
$translator = $this->get('translator');
$pageLayoutProvider = $this->get(PageLayoutProvider::getServiceId());
$pageManager = $this->get(BasePageManager::class);
$channelProvider = $this->get(ChannelProvider::class);
// Allow to show unpublished pages on preview POST.
$published = $request->request->get('page') === null;
$managerData = new ManagerData([
'slug' => $slug,
'published' => $published,
'channel' => $channelProvider->getCurrentChannel(),
]);
// Use forwarded page, or get new one by slug and channel.
if (null === $page = $page ?: $pageManager->getFirst($managerData)) {
throw $this->createNotFoundException($translator->trans('page.not_found', [], 'exception'));
}
if($page->components){
return $this->forward("VisualMedia\BartPageBundle\Controller\PageController::viewBySlugAction",[
"request" => $request,
"slug" => $slug,
"page" => $page
]);
}
return $this->render($pageLayoutProvider->getLayout($page->getLayout()), [
'browser_title' => $page->browserTitle,
'meta_description' => $page->metaDescription,
'meta_keywords' => $page->metaKeywords,
'indexable' => $page->indexable,
'page' => $page,
]);
}
}