Provide Sulu twig template attributes in your controller¶
In order to use the base
template that is used for pages on custom routes, you need to provide the correct
attributes to your template. To do this, you can use the``TemplateAttributeResolver`` service in your controller:
<?php
namespace App\Controller\Website;
use Sulu\Bundle\HttpCacheBundle\Cache\SuluHttpCache;
use Sulu\Bundle\WebsiteBundle\Resolver\TemplateAttributeResolverInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Attribute\AsController;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
#[AsController]
class StaticController
{
/**
* @Route("/custom", name="app_custom")
*/
public function indexAction(
TemplateAttributeResolverInterface $resolver,
Environment $twig
): Response {
$response = new Response($twig->render(
'static/custom.html.twig',
$resolver->resolve([
'customAttribute' => 'parameter',
])
));
// Cached response:
$response->setPublic();
$response->setMaxAge(240);
$response->setSharedMaxAge(240);
// Server Cache Lifetime (how long the server should cache the page in seconds)
$response->headers->set(SuluHttpCache::HEADER_REVERSE_PROXY_TTL, '604800'); // 604800 seconds = 1 week
// Uncached response private response (for controller containing user specific data):
// $response->setPrivate();
// $response->setMaxAge(0);
// $response->setSharedMaxAge(0);
// $response->headers->addCacheControlDirective('no-cache', true);
// $response->headers->addCacheControlDirective('must-revalidate', true);
// $response->headers->addCacheControlDirective('no-store', true);
return $response;
}
}
Now your templates/static/custom.html.twig
can use the same base template as your pages:
{% extends "base.html.twig" %}
{% block content %}
{{ customAttribute }}
{% endblock %}