【问题标题】:HTML is not rendered [Twig] / [Slim]HTML 未呈现 [Twig] / [Slim]
【发布时间】:2016-08-10 00:47:48
【问题描述】:

我使用 twig 作为模板引擎,但我的 html 没有呈现。所有内容都与 HTML 标签本身一起显示。

Data from Database can be found by clicking here

我搜索了 SO,得到了许多提供解决方案的帖子,但没有一个对我有用

以下是解决方案:

  1. 使用下面的代码[不起作用]

    {{ detailArticle.artdesc|raw }}
    
     or
    
    {% autoescape false %}
      {{ detailArticle.artdesc }}
    {% endautoescape %}
    
  2. 使用如下过滤器和自动加载[不工作]

    $app->view = new \Slim\Views\Twig();
    $app->view->setTemplatesDirectory("application/view");
    $app->view->parserOptions = array(
       'debug' => 'true',
       'auto_reload' => true,
       'autoescape' => true
    );
    $app->view->parserExtensions = array(new \Slim\Views\TwigExtension());
    
  3. 清除 Twig 缓存 [我在 cPanel 上没有 CLI,所以不知道该怎么做]

    rm -rf app/cache/*  OR rm -rf app/cache/prod/twig OR app/console cache:clear --env=prod
    

没有适合我的解决方案。请指导。

数据的显示方式与您在上述链接中看到的方式相同。

我的 composer.json 如下

{
 "name":"panique/mini2",
 "homepage":"https://github.com/panique/mini2",
 "license":"MIT",
 "require":{
    "php":">=5.3.0",
    "slim/slim": "~2.6",
    "slim/views": "~0.1",
    "twig/twig": "~1.16",
    "panique/pdo-debug": "0.2",
    "panique/php-sass": "~1.0",
    "matthiasmullie/minify": "~1.3"
 },
"autoload":{
    "psr-4":{
        "Mini\\": "Mini"
    }
 }
}

【问题讨论】:

  • 你试过verbatim标签吗?
  • 这个怎么用...
  • 嗨@gags 我在我的回答中发布了一个例子。告诉我
  • 对不起@gags 不是你的情况...

标签: php html twig slim


【解决方案1】:

遇到了同样的问题并通过添加 Twig_Extnesion_Escaper 解决了它:

$v = new \Slim\Views\Twig(__DIR__ . '/../../templates', [
    'cache' => __DIR__ . '/../../templates/twigcache'
]);
$v->addExtension(new Twig_Extension_Escaper());

【讨论】:

    【解决方案2】:

    几个月前我解决了同样的问题。 你需要在你的 php 中写这个:

    $escaper = new Twig_Extension_Escaper(false);
    $app->view->addExtension($escaper);
    

    我的代码

    require_once 'path_to_Twig/Autoloader.php';
    Twig_Autoloader::register();
    
    $loader = new Twig_Loader_Filesystem('path_to_views/');
    $twig = new Twig_Environment($loader, array());
    
    $escaper = new Twig_Extension_Escaper(false);
    $twig->addExtension($escaper);
    
    echo $twig->render($view_name, $data_to_view);
    

    代码步骤

    1. 下载:http://pear.twig-project.org/get/Twig-1.24.0.tgz
    2. 解压缩并放入您的项目中。
    3. 把这个写在你的文件里:
     require 'vendor/autoload.php'; 
    
     // Initialize Slim (the router/micro framework used) 
     $app = new \Slim\Slim(array( 
     'mode' => 'production' 
     )); 
    
     require_once 'path_to_Twig/Autoloader.php'; //Substitute the Twig path, the path to the uncompress files in the project 
     Twig_Autoloader::register(); 
    
     $loader = new Twig_Loader_Filesystem('path_to_views/'); //Substitute with the path with the html files 
     $twig = new Twig_Environment($loader, array()); 
    
     $escaper = new Twig_Extension_Escaper(false); 
     $twig->addExtension($escaper); 
    
     echo $twig->render($view_name, $data_to_view); //First the name of the view html file, data that you want pass to the view in one array 
    

    当你想在控制器中渲染视图时,你需要把所有这些都放在,也就是说,你用这个替换你的代码。

    【讨论】:

    • 调用未定义的方法 Slim\Views\Twig::addExtension() 是错误
    • 但是你已经创建了 twig 对象并且 addExtension 是一个方法。您可以创建对象但不能访问方法,这很奇怪。
    • Twig_Extension_Escaper 的位置
    • 我在解决方案中编写了我的所有代码,我将此代码用于所有项目。如果您在 Slimframework 中使用命名空间,请尝试直接使用 Twig,就像我的代码一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多