2

使用“字段集合”模块时出现此错误:

 Twig_Sandbox_SecurityError: Calling "uri" method on a "Drupal\field_collection\Entity\FieldCollectionItem" object is not allowed in "themes/communitylife/templates/content/node.html.twig" at line 83. in Drupal\Core\Template\TwigSandboxPolicy->checkMethodAllowed() (line 99 of core/lib/Drupal/Core/Template/TwigSandboxPolicy.php).

导致问题的代码是这个:

<div class=" title-col col-md-7">

     <a  href="{{file_url(node.field_pressemappe_bildmaterial[key].getFieldCollectionItem().field_presse_bild_file.entity.uri.value)}}" target="_blank"> <strong> {{node.field_pressemappe_bildmaterial[key].getFieldCollectionItem().field_presse_bild_description.value}}

      <span class="file-type"> ({{node.field_pressemappe_bildmaterial[key].getFieldCollectionItem().field_presse_bild_file.entity.uri.value | slice(-3) }} </span>, <span class="file-size"> {{node.field_pressemappe_bildmaterial[key].getFieldCollectionItem().field_presse_bild_file.entity.size }}) </span> 

      </strong></a>

</div>

解决此问题的最佳方法是什么?是通过将 (uri) 添加到沙盒策略中的允许方法吗?如果是,那么我该怎么做?

我在树枝文档中读到我可以做这样的事情:

    $policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);

但我不明白如何或在哪里放置这段代码。

提前致谢

4

1 回答 1

7

Drupal 的 twig 沙箱策略(在core/lib/Drupal/Core/Template/TwigSandboxPolicy.php中定义)从全局 $settings 数组中读取,因此您可以在 settings.php 中定义自己的策略,即

// Override default twig method whitelist.
$settings['twig_sandbox_whitelisted_methods'] = [
  // Defaults:
  'id',
  'label',
  'bundle',
  'get',
  '__toString',
  'toString',
  // Additions:
  'url',
];
于 2017-07-26T10:14:24.793 回答