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

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.     public static function getSubscribedServices()
  29.     {
  30.         $services parent::getSubscribedServices();
  31.         $services[EditmodeResolver::class] = '?'.EditmodeResolver::class;
  32.         $services[DocumentResolver::class] = '?'.DocumentResolver::class;
  33.         $services[ResponseHeaderResolver::class] = '?'.ResponseHeaderResolver::class;
  34.         $services[EditableRenderer::class] = '?'.EditableRenderer::class;
  35.         return $services;
  36.     }
  37.     /**
  38.      * document and editmode as properties and proxy them to request attributes through
  39.      * their resolvers.
  40.      *
  41.      * {@inheritdoc}
  42.      */
  43.     public function __get($name)
  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 = ['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.      * We don't have a response object at this point, but we can add headers here which will be
  69.      * set by the ResponseHeaderListener which reads and adds this headers in the kernel.response event.
  70.      *
  71.      * @param string $key
  72.      * @param array|string $values
  73.      * @param bool $replace
  74.      * @param Request|null $request
  75.      */
  76.     protected function addResponseHeader(string $key$valuesbool $replace falseRequest $request null)
  77.     {
  78.         if (null === $request) {
  79.             $request $this->get('request_stack')->getCurrentRequest();
  80.         }
  81.         $this->get(ResponseHeaderResolver::class)->addResponseHeader($request$key$values$replace);
  82.     }
  83.     /**
  84.      * Loads a document editable
  85.      *
  86.      * e.g. `$this->getDocumentEditable('input', 'foobar')`
  87.      *
  88.      * @param string $type
  89.      * @param string $inputName
  90.      * @param array $options
  91.      * @param Document\PageSnippet|null $document
  92.      *
  93.      * @return Document\Editable\EditableInterface
  94.      */
  95.     public function getDocumentEditable($type$inputName, array $options = [], Document\PageSnippet $document null)
  96.     {
  97.         if (null === $document) {
  98.             $document $this->document;
  99.         }
  100.         $editableRenderer $this->container->get(EditableRenderer::class);
  101.         return $editableRenderer->getEditable($document$type$inputName$options);
  102.     }
  103.     /**
  104.      * @param string $view
  105.      * @param array $parameters
  106.      * @param Response|null $response
  107.      *
  108.      * @return \Symfony\Component\HttpFoundation\Response
  109.      */
  110.     public function renderTemplate($view, array $parameters = [], Response $response null)
  111.     {
  112.         return $this->render($view$parameters$response);
  113.     }
  114. }