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

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 Commercial License (PCL)
  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 PCL
  13.  */
  14. namespace Pimcore\Controller;
  15. use Pimcore\Http\Request\Resolver\DocumentResolver;
  16. use Pimcore\Http\Request\Resolver\EditmodeResolver;
  17. use Pimcore\Http\Request\Resolver\ResponseHeaderResolver;
  18. use Pimcore\Model\Document;
  19. use Pimcore\Templating\Renderer\EditableRenderer;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. /**
  23.  * @property Document|Document\PageSnippet $document
  24.  * @property bool $editmode
  25.  */
  26. abstract class FrontendController extends Controller
  27. {
  28.     /**
  29.      * {@inheritdoc}
  30.      *
  31.      */
  32.     public static function getSubscribedServices()// : array
  33.     {
  34.         $services parent::getSubscribedServices();
  35.         $services[EditmodeResolver::class] = '?'.EditmodeResolver::class;
  36.         $services[DocumentResolver::class] = '?'.DocumentResolver::class;
  37.         $services[ResponseHeaderResolver::class] = '?'.ResponseHeaderResolver::class;
  38.         $services[EditableRenderer::class] = '?'.EditableRenderer::class;
  39.         return $services;
  40.     }
  41.     /**
  42.      * document and editmode as properties and proxy them to request attributes through
  43.      * their resolvers.
  44.      *
  45.      * {@inheritdoc}
  46.      */
  47.     public function __get($name)
  48.     {
  49.         if ('document' === $name) {
  50.             return $this->get(DocumentResolver::class)->getDocument();
  51.         }
  52.         if ('editmode' === $name) {
  53.             return $this->get(EditmodeResolver::class)->isEditmode();
  54.         }
  55.         throw new \RuntimeException(sprintf('Trying to read undefined property "%s"'$name));
  56.     }
  57.     /**
  58.      * {@inheritdoc}
  59.      */
  60.     public function __set($name$value)
  61.     {
  62.         $requestAttributes = ['document''editmode'];
  63.         if (in_array($name$requestAttributes)) {
  64.             throw new \RuntimeException(sprintf(
  65.                 'Property "%s" is a request attribute and can\'t be set on the controller instance',
  66.                 $name
  67.             ));
  68.         }
  69.         throw new \RuntimeException(sprintf('Trying to set unknown property "%s"'$name));
  70.     }
  71.     /**
  72.      * We don't have a response object at this point, but we can add headers here which will be
  73.      * set by the ResponseHeaderListener which reads and adds this headers in the kernel.response event.
  74.      *
  75.      * @param string $key
  76.      * @param array|string $values
  77.      * @param bool $replace
  78.      * @param Request|null $request
  79.      */
  80.     protected function addResponseHeader(string $key$valuesbool $replace falseRequest $request null)
  81.     {
  82.         if (null === $request) {
  83.             $request $this->get('request_stack')->getCurrentRequest();
  84.         }
  85.         $this->get(ResponseHeaderResolver::class)->addResponseHeader($request$key$values$replace);
  86.     }
  87.     /**
  88.      * Loads a document editable
  89.      *
  90.      * e.g. `$this->getDocumentEditable('input', 'foobar')`
  91.      *
  92.      * @param string $type
  93.      * @param string $inputName
  94.      * @param array $options
  95.      * @param Document\PageSnippet|null $document
  96.      *
  97.      * @return Document\Editable\EditableInterface
  98.      */
  99.     public function getDocumentEditable($type$inputName, array $options = [], Document\PageSnippet $document null)
  100.     {
  101.         if (null === $document) {
  102.             $document $this->document;
  103.         }
  104.         $editableRenderer $this->container->get(EditableRenderer::class);
  105.         return $editableRenderer->getEditable($document$type$inputName$options);
  106.     }
  107.     /**
  108.      * @param string $view
  109.      * @param array $parameters
  110.      * @param Response|null $response
  111.      *
  112.      * @return \Symfony\Component\HttpFoundation\Response
  113.      */
  114.     public function renderTemplate($view, array $parameters = [], Response $response null)
  115.     {
  116.         return $this->render($view$parameters$response);
  117.     }
  118. }