vendor/pimcore/pimcore/lib/Controller/FrontendController.php line 34

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace Pimcore\Controller;
  15. use Pimcore\Controller\Traits\TemplateControllerTrait;
  16. use Pimcore\Http\Request\Resolver\DocumentResolver;
  17. use Pimcore\Http\Request\Resolver\EditmodeResolver;
  18. use Pimcore\Http\Request\Resolver\ResponseHeaderResolver;
  19. use Pimcore\Http\Request\Resolver\ViewModelResolver;
  20. use Pimcore\Model\Document;
  21. use Pimcore\Templating\Model\ViewModel;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  25. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  26. /**
  27.  * @property ViewModel $view
  28.  * @property Document|Document\PageSnippet $document
  29.  * @property bool $editmode
  30.  */
  31. abstract class FrontendController extends Controller implements EventedControllerInterfaceTemplateControllerInterface
  32. {
  33.     use TemplateControllerTrait;
  34.     /**
  35.      * Expose view, document and editmode as properties and proxy them to request attributes through
  36.      * their resolvers.
  37.      *
  38.      * @inheritDoc
  39.      */
  40.     public function __get($name)
  41.     {
  42.         if ('view' === $name) {
  43.             return $this->get(ViewModelResolver::class)->getViewModel();
  44.         }
  45.         if ('document' === $name) {
  46.             return $this->get(DocumentResolver::class)->getDocument();
  47.         }
  48.         if ('editmode' === $name) {
  49.             return $this->get(EditmodeResolver::class)->isEditmode();
  50.         }
  51.         throw new \RuntimeException(sprintf('Trying to read undefined property "%s"'$name));
  52.     }
  53.     /**
  54.      * @inheritDoc
  55.      */
  56.     public function __set($name$value)
  57.     {
  58.         $requestAttributes = ['view''document''editmode'];
  59.         if (in_array($name$requestAttributes)) {
  60.             throw new \RuntimeException(sprintf(
  61.                 'Property "%s" is a request attribute and can\'t be set on the controller instance',
  62.                 $name
  63.             ));
  64.         }
  65.         throw new \RuntimeException(sprintf('Trying to set unknown property "%s"'$name));
  66.     }
  67.     /**
  68.      * @inheritDoc
  69.      */
  70.     public function onKernelController(FilterControllerEvent $event)
  71.     {
  72.         // enable view auto-rendering
  73.         $this->setViewAutoRender($event->getRequest(), true'php');
  74.     }
  75.     /**
  76.      * @inheritDoc
  77.      */
  78.     public function onKernelResponse(FilterResponseEvent $event)
  79.     {
  80.     }
  81.     /**
  82.      * Enable view autorendering for the current request
  83.      *
  84.      * @param Request $request
  85.      * @param string $engine
  86.      */
  87.     protected function enableViewAutoRender(Request $request null$engine 'php')
  88.     {
  89.         if (null === $request) {
  90.             $request $this->get('request_stack')->getCurrentRequest();
  91.         }
  92.         $this->setViewAutoRender($requesttrue$engine);
  93.     }
  94.     /**
  95.      * Disable view autorendering for the current request
  96.      *
  97.      * @param Request $request
  98.      */
  99.     protected function disableViewAutoRender(Request $request null)
  100.     {
  101.         if (null === $request) {
  102.             $request $this->get('request_stack')->getCurrentRequest();
  103.         }
  104.         $this->setViewAutoRender($requestfalse);
  105.     }
  106.     /**
  107.      * We don't have a response object at this point, but we can add headers here which will be
  108.      * set by the ResponseHeaderListener which reads and adds this headers in the kernel.response event.
  109.      *
  110.      * @param string $key
  111.      * @param array|string $values
  112.      * @param bool $replace
  113.      * @param Request|null $request
  114.      */
  115.     protected function addResponseHeader(string $key$valuesbool $replace falseRequest $request null)
  116.     {
  117.         if (null === $request) {
  118.             $request $this->get('request_stack')->getCurrentRequest();
  119.         }
  120.         $this->get(ResponseHeaderResolver::class)->addResponseHeader($request$key$values$replace);
  121.     }
  122.     /**
  123.      * Loads a document editable
  124.      *
  125.      * e.g. `$this->getDocumentTag('input', 'foobar')`
  126.      *
  127.      * @param string $type
  128.      * @param string $inputName
  129.      * @param array $options
  130.      * @param Document\PageSnippet|null $document
  131.      *
  132.      * @return null|Document\Tag
  133.      */
  134.     public function getDocumentTag($type$inputName, array $options = [], Document\PageSnippet $document null)
  135.     {
  136.         if (null === $document) {
  137.             $document $this->document;
  138.         }
  139.         $tagRenderer $this->container->get('pimcore.templating.tag_renderer');
  140.         return $tagRenderer->getTag($document$type$inputName$options);
  141.     }
  142.     /**
  143.      * @param string $view
  144.      * @param array $parameters
  145.      * @param Response|null $response
  146.      *
  147.      * @return \Symfony\Component\HttpFoundation\Response
  148.      */
  149.     public function renderTemplate($view, array $parameters = [], Response $response null)
  150.     {
  151.         $viewModel $this->get(ViewModelResolver::class)->getViewModel();
  152.         $parameters array_merge($viewModel->getAllParameters(), $parameters);
  153.         return $this->render($view$parameters$response);
  154.     }
  155. }