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

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