如何使用Code igniter集成Twig模板?

时间:2015-02-25 12:13:29

标签: php codeigniter twig

我尝试使用此link to twig basics将Twig模板实现为代码点火器。

这是我的代码:

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!

但我无法在代码点火器中找到模板文件夹。

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

有人已经建立了图书馆,以便在twig和ci之间建立联系。

您可以看到以下链接

  

https://github.com/bmatschullat/Twig-Codeigniter

答案 1 :(得分:1)

有很多项目将Twig集成到CodeIgniter中。

以下是其中一些(按CodeIgniter版本):

答案 2 :(得分: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。

希望有所帮助。

答案 3 :(得分:0)

我所知道的最好,最简单的是:

首先使用composer将树枝添加到您的项目中(这将使其保持最新状态):

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']);
}