-
-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathTypoScriptRenderingContentObject.php
More file actions
87 lines (76 loc) · 2.8 KB
/
TypoScriptRenderingContentObject.php
File metadata and controls
87 lines (76 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
namespace Helhum\TyposcriptRendering\ContentObject;
/*
* This file is part of the TypoScript Rendering TYPO3 extension.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read
* LICENSE file that was distributed with this source code.
*
*/
use Helhum\TyposcriptRendering\Exception;
use Helhum\TyposcriptRendering\Mvc\Request;
use Helhum\TyposcriptRendering\Mvc\RequestBuilder;
use Helhum\TyposcriptRendering\Mvc\Response;
use Helhum\TyposcriptRendering\Renderer\RenderingContext;
use Helhum\TyposcriptRendering\Renderer\RenderingInterface;
use TYPO3\CMS\Frontend\ContentObject\AbstractContentObject;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
class TypoScriptRenderingContentObject extends AbstractContentObject
{
/**
* @var RequestBuilder
*/
private $requestBuilder;
/**
* @var string[]
*/
private $renderer;
/**
* @param RequestBuilder $requestBuilder
* @param string[] $renderer
*/
public function __construct(ContentObjectRenderer $cObj, RequestBuilder $requestBuilder = null, array $renderer = null)
{
$this->requestBuilder = $requestBuilder ?: new RequestBuilder();
$this->renderer = $renderer ?: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['typoscript_rendering']['renderClasses'];
}
public function render($conf = []): string
{
$renderingRequest = $this->requestBuilder->build($conf['request']);
$response = new Response();
$renderer = $this->resolveRenderer($renderingRequest);
$renderingContext = new RenderingContext($GLOBALS['TSFE']);
$renderer->renderRequest($renderingRequest, $response, $renderingContext);
return $response->getContent();
}
/**
* @param Request $request
*
* @throws Exception
* @return RenderingInterface
*
*/
protected function resolveRenderer(Request $request)
{
if ($request->hasArgument('renderer') && isset($this->renderer[$request->getArgument('renderer')])) {
$rendererClassName = $this->renderer[$request->getArgument('renderer')];
/** @var RenderingInterface $renderer */
$renderer = new $rendererClassName();
if ($renderer->canRender($request)) {
return $renderer;
}
}
foreach ($this->renderer as $rendererClassName) {
/** @var RenderingInterface $renderer */
$renderer = new $rendererClassName();
if ($renderer->canRender($request)) {
return $renderer;
}
}
throw new Exception('No renderer found for this request!', 1403628294);
}
}