【问题标题】:Is there a template system like Twig that uses PHP syntax?有没有像 Twig 这样使用 PHP 语法的模板系统?
【发布时间】:2012-01-18 14:59:23
【问题描述】:

我想使用像 Twig 这样的模板系统(特别是块功能),但使用纯 PHP。

例如,我找到了http://phpsavant.com/docs/,但它似乎不支持块或类似的东西。

编辑 我发现一些似乎具有常规 PHP 代码的块语法:http://phpti.com/

【问题讨论】:

  • 块功能是什么意思? Savant 的示例代码中的 foreach 循环对我来说已经足够好了。真的,如果你想要纯 PHP,只需使用 plain PHP
  • 这里的块是您在模板中定义的,但可以在完全不同的模板中呈现。例如:在一般布局中,您为页面标题定义一个块,然后在每个模板中填充该块的内容。所以你设置 content_for "title" => "This is the title",但它是在布局中呈现的

标签: php twig


【解决方案1】:

您正在寻找的模板语言称为 PHP!

【讨论】:

  • 不是很有建设性的回应。
【解决方案2】:

Symfony(默认使用 Twig)还有一个基于 php 的模板系统,其工作方式与 Twig 非常相似。它具有模板继承并使用“插槽”,相当于 Twig 的块。它是一个独立的库,可以在完整的 Symfony 框架之外使用。

http://symfony.com/doc/2.0/cookbook/templating/PHP.html

【讨论】:

    【解决方案3】:

    PHP 是一种模板语言(是的),块可以用缓冲区实现:

    <?php
    ob_start();
    ?>
      this the content of the block for <?= date("Y-m-d") ?>
    <?php
    $content = ob_get_clean();
    

    然后在主布局中回显块的内容:

    echo $head;
    echo $content ;
    // ....
    

    事实上,这是大多数模板引擎都在使用的。

    虽然使用模板库有很大的优势(缓存、默认转义等...)

    【讨论】:

      【解决方案4】:

      Laravel 框架中包含一个名为Blade

      您可以将普通的旧 PHP 与 Blade 模板语法混合使用,其中 {{...}} 也可以转换为 &lt;?=...?&gt;&lt;?php echo ... ?&gt;

      在 Twig 中也有你知道的块,但它们被称为 sections

      @section('heading')
          {{ strtoupper("I'm not shouting") }}
      @show
      
      <?= strtolower('Shhh!'); ?>
      

      这是在 Illuminate\View 命名空间 - See on GitHub 下,并且可以使用 Composer 下载,因为它也在 Packagist 上注册 - 就在您项目的 composer.json 的以下位置。

      {
          "require": {
              "illuminate/view": "4.*"
          }
      }
      

      目前我不确定您将如何尝试从自定义项目中呈现模板。如果我发现了,我会更新我的答案。

      【讨论】:

        【解决方案5】:

        据我所知,在Laravel 中使用关闭Blade 来获取视图是可选的。您可以使用 view.php 之类的文件名而不是 view.blade.php 并在那里使用普通的旧 PHP 语法。唯一要注意的是,您不能同时拥有 view.phpview.blade.php,因为它们都响应

        return View::make('view);
        

        【讨论】:

          猜你喜欢
          • 2011-12-02
          • 1970-01-01
          • 1970-01-01
          • 2012-08-16
          • 1970-01-01
          • 2011-02-26
          • 1970-01-01
          • 2011-11-28
          • 1970-01-01
          相关资源
          最近更新 更多