如何在CodeIgniter中集成Twig模板?

5

我尝试使用Twig基础知识链接将Twig模板实现到CodeIgniter中。

这是我的代码:

require_once(APPPATH.'path/to/Twig/Autoloader.php');
Twig_Autoloader::register();
$loader = new Twig_Loader_Array(array('index' => 'Hello {{ name }}!'));
$twig =new Twig_Environment($loader);
echo $twig->render('index', array('name' =>'Testing Twig'));

它输出的结果是:
Hello Testing Twig!

但是我无法在CodeIgniter中找到模板文件夹。

有人能帮我吗?


你需要实现自己的文件加载机制。CI默认不支持Twig。你可以覆盖视图加载器,使用Twig渲染视图。 - Broncha
抱歉,@Broncha,我不明白你的意思,你能详细说明一下,在哪里应该进行重写吗? - Akilsree1
你以前使用过Sparks Repo吗? http://edmundask.github.io/codeigniter-twiggy/ - Philip
我尝试了该Github的集成,但并没有得到所需的输出,@philip也没有出现任何错误。 - Akilsree1
4个回答

2
我知道的最好、最简单的方法是:
首先,使用composer将twig包引入到您的项目中(这样可以保持它的最新状态):
composer require "twig/twig:^2.0"

接下来,创建文件application/libraries/Twig.php(大小写很重要),并包含以下内容:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

require_once(FCPATH . 'vendor/autoload.php');

class Twig {
    private $twig;

    public function __construct()
    {
        $loader = new Twig_Loader_Filesystem(APPPATH . 'views');
        $this->twig = new Twig_Environment($loader);
    }

    public function render($template, $placeholders)
    {
        return $this->twig->render($template . '.php', $placeholders);
    }
}

最后,像这样在控制器中使用它:
public function index()
{
    $this->load->library('twig'); // Can also be autoloaded
    echo $this->twig->render('some_page_in_views', ['foo' => 'barr']);
}

1

这是一个控制器中的方法,使用Twig渲染模板。

public function some_method () {

    $ci_path = realpath(FCPATH);

    Twig_Autoloader::register();

    $loader = new Twig_Loader_Filesystem($ci_path.'/application/views');

    $twig = new Twig_Environment($loader, array(
        'cache' => $ci_path.'/application/views_twig_cache',
    ));                

    $template = $twig->loadTemplate('twigtest.php');

    echo $template->render(['name'=>'Jhon']);

}

也许你需要做的是将Twig_Loader_Filesystem设置为正确的路径。请注意,我还设置了缓存路径...如果你取消此设置,每次页面加载时模板都会重新生成。
我正在使用composer autoload进行自动加载(请参见应用程序文件夹中的config/config.php)。我在application/vendor中有composer.json。
希望这可以帮到你。

1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接