Completed
Push — master ( c0f250...321e24 )
by Filipe
15:10
created

RendererMiddleware::process()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 2
1
<?php
2
3
/**
4
 * This file is part of slick/web_stack package
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
namespace Slick\WebStack\Http\Server;
11
12
use Interop\Http\Server\MiddlewareInterface;
13
use Interop\Http\Server\RequestHandlerInterface;
14
use Psr\Http\Message\ResponseInterface;
15
use Psr\Http\Message\ServerRequestInterface;
16
use Slick\Http\Message\Stream\TextStream;
17
use Slick\Template\TemplateEngineInterface;
18
use Slick\WebStack\Renderer\ViewInflectorInterface;
19
20
/**
21
 * RendererMiddleware
22
 *
23
 * @package Slick\WebStack\Http\Server
24
 */
25
class RendererMiddleware implements MiddlewareInterface
26
{
27
    /**
28
     * @var TemplateEngineInterface
29
     */
30
    private $templateEngine;
31
32
    /**
33
     * @var ViewInflectorInterface
34
     */
35
    private $viewInflector;
36
37
    /**
38
     * Creates a Renderer Middleware
39
     *
40
     * @param TemplateEngineInterface $templateEngine
41
     * @param ViewInflectorInterface $viewInflector
42
     */
43
    public function __construct(TemplateEngineInterface $templateEngine, ViewInflectorInterface $viewInflector)
44
    {
45
        $this->templateEngine = $templateEngine;
46
        $this->viewInflector = $viewInflector;
47
    }
48
49
    /**
50
     * Process an incoming server request and return a response, optionally delegating
51
     * response creation to a handler.
52
     *
53
     * @param ServerRequestInterface $request
54
     * @param RequestHandlerInterface $handler
55
     *
56
     * @return ResponseInterface
57
     */
58
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler)
59
    {
60
        $response = $handler->handle($request);
61
        $body = new TextStream($this->createContent($request));
62
        $response = $response->withBody($body);
63
        return $response;
64
    }
65
66
    /**
67
     * Generates the content form request attributes
68
     *
69
     * @param ServerRequestInterface $request
70
     *
71
     * @return string
72
     */
73
    private function createContent(ServerRequestInterface $request)
74
    {
75
        $route = $request->getAttribute('route');
76
        $template = $this->viewInflector->inflect($route);
77
        $this->templateEngine->parse($template);
78
        return $this->templateEngine->process($request->getAttribute('viewData', []));
79
    }
80
}
81