Skip to content

Instantly share code, notes, and snippets.

@geerteltink
Created March 29, 2018 10:21
Show Gist options
  • Save geerteltink/807b7b576001c05a6dc5c5481bfa51dc to your computer and use it in GitHub Desktop.
Save geerteltink/807b7b576001c05a6dc5c5481bfa51dc to your computer and use it in GitHub Desktop.
Zend Expressive injecting default variables into templates.
<?php
declare(strict_types=1);
namespace Xtreamwayz\Expressive\TwigExtras\Middleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Xtreamwayz\Expressive\Session\Authentication\UserInterface;
use Xtreamwayz\Expressive\Session\Flash\FlashMessagesInterface;
use Zend\Expressive\Router\RouteResult;
use Zend\Expressive\Template\TemplateRendererInterface;
class TemplateDefaultsMiddleware implements MiddlewareInterface
{
/** @var TemplateRendererInterface */
private $templateRenderer;
public function __construct(TemplateRendererInterface $templateRenderer)
{
$this->templateRenderer = $templateRenderer;
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
{
$this->templateRenderer->addDefaultParam(
TemplateRendererInterface::TEMPLATE_ALL,
'security',
$request->getAttribute(UserInterface::class)
);
$routeResult = $request->getAttribute(RouteResult::class);
$this->templateRenderer->addDefaultParam(
TemplateRendererInterface::TEMPLATE_ALL,
'matchedRouteName',
$routeResult ? $routeResult->getMatchedRouteName() : null
);
/** @var FlashMessagesInterface $flashMessages */
$flashMessages = $request->getAttribute(FlashMessagesInterface::class);
$this->templateRenderer->addDefaultParam(
TemplateRendererInterface::TEMPLATE_ALL,
'notifications',
$flashMessages ? $flashMessages->getFlashes() : []
);
return $handler->handle($request);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment