Я пытаюсь изучить Symfony 4 и его шаблоны. Когда я пытаюсь соединить блоки с такими шаблонами:
// templates/base2.html.twig
<!DOCTYPE html>
<html>
<body>
<h2>test</h2>
{% block blockoftext %}{% endblock %}
</body>
</html>
(код блока)
// templates/mainpage/index.html.twig
{% extends 'base2.html.twig' %}
{% block blockoftext %}
<h1>And I say: {{ string }}</h1>
{% endblock %}
а затем используйте это так:
// src/Controller/mainpage.php
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class mainpage extends AbstractController
{
/**
* @Route("/mainpage")
*/
public function mainpage()
{
$text = 'Hello, world!';
return $this->render('base2.html.twig', array(
'string' => $text,
));
}
}
?>
выход
<!DOCTYPE html>
<html>
<body>
<h2>test</h2>
Итак, блок blockoftext не подключен. Что мне делать, чтобы получить такой результат:
<!DOCTYPE html>
<html>
<body>
<h2>test</h2>
<h1>And I say: Hello, world!</h1>
?
Визуализируйте mainpage/index.html.twig вместо макета. Разве это не очевидно? И сначала следуйте за https://symfony.com/doc/current/templating.html, он охватывает основы.






В
public function mainpage()
{
$text = 'Hello, world!';
return $this->render('base2.html.twig', array(
'string' => $text,
));
}
Измените возврат на
return $this->render('index.html.twig', array(
'string' => $text,
));
Индексный файл является расширением файла base2. А не наоборот. Таким образом, index будет включать base2, но base2 не будет включать ничего из index.
У вас он немного задом наперед. вы должны рендерить
index.html.twigвместо base2