0

私は Twig を使い始めようとしていますが、{% block %} をまったく機能させるのに本当に頭が痛いです。

私のindex.phpローダーは次のようになります。

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

require_once( "Twig/Autoloader.inc.php" );

Twig_Autoloader::register();

$twig = new Twig_Environment( new Twig_Loader_Filesystem("templates"));

$vars = array (
    "user" => array(
        "name" => "Joe Bloggs"
        ),
    "title" => "My website"
);

$tpl = $twig->loadTemplate("index.html");
echo $tpl->render($vars);

?>

のindex.htmlの簡易バージョンは/templates次のようになります。

<!doctype html>
<html>
<body>
Hello World!
{% block navigation %}Test{% endblock %}
</body>
</html>

そして、navigation.htmlは次の/templatesようになります。

{% extends "index.html" %}
{% block navigation %}
<!-- Navigation -->
<nav>
    Some navigation
</nav>
{% endblock %}

私が理解している限り、これはブロック機能の基本的な動作例です。Twig のその他の部分は問題なく機能しているようで、エラーは報告されていません。実際、ページは "Test" を正常に出力します。

どこかのnavigation.htmlファイルを明示的に指定する必要がありますか?それとも、Twig は/templatesフォルダー内のすべてのファイルを自動的にロードしますか?

4

1 に答える 1

1

エラー:ナビゲーションテンプレートではなく、インデックステンプレートをレンダリングしています。

インデックステンプレートでは、ナビゲーションブロックに「テスト」が含まれているため、出力は正しいです。Navigation.htmlをレンダリングすると、index.htmlからhtmlコンテンツを取得し、ナビゲーションテンプレートからナビゲーションブロックを取得します(オーバーライドするのはそれだけです)。

出力したいテンプレートを常にレンダリングする必要があります。1つは多くの人によって拡張される可能性があります(たとえば、レイアウトはすべてのアクションのテンプレートによって拡張される可能性があります)。

于 2012-08-31T07:42:34.007 に答える