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

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