2016-06-09 94 views
0

我正在构建Drupal 8网站,并且是树枝模板引擎的新增部分。对于一个特定的内容类型,我想调用一个外部的restful API,并将一些返回的数据作为字段放在树枝模板中。从外部api填充树枝模板

我有一个内部的ID调出的API,我想在模板中嵌入:

  • API调用
  • 设置了许多的变数来自呼叫
  • 渲染结果(如果它不存在,请使用一些逻辑)

这是用小枝和drupal 8轻松做到的事情吗? 作为第二个问题,这是安全的吗?

在这个阶段的另一种选择是编写小的Drupal 8模块,但由于页面上没有用户输入,只是从返回的api调用渲染,所以我认为将它放在一个地方会更容易。

+0

Twig只是模板引擎,它并不关心数据来自何处。它只对输出负责......所以如果你的问题是枝条可以做到这一点,那么是的。 – DarkBee

+0

你是说我只能在模板中间转储一个PHP调用?这是安全的吗?那实际上会是什么样子? – raf

+0

如果您想从内部执行API调用,您需要[extend twig](http://twig.sensiolabs.org/doc/advanced.html)并创建一个函数,以从API API的 – DarkBee

回答

0

在Drupal 7中,将任意PHP放入模板是可能的,但是设计不佳。在Drupal 8中,很难有意做到这一点。你不应该试图在你的Twig文件中执行任意的PHP,或者在处理请求时进行远程API调用。

您应该调用API并在之前收集数据。您应该创建一个处理该API交互的自定义​​模块,并将响应置于字段,块或其他结构中以便在适当的上下文中呈现(通常,自定义块对于此类事情而言效果很好,但确切地说哪种方法最有意义取决于你的项目)。您还应该记住,任何需要远程API调用的页面可能会很慢,除非该API调用非常简单且非常快速。 BigPipe模块可以帮助您解决这些速度问题,但需要额外的学习曲线。

如果您希望浏览器处理API调用,您需要创建一个div(或类似的标记)来放置结果,并将JavaScript附加到结构中,并在大部分页面后进行实际的API调用加载完成。

至于安全性:它是一样安全的,因为你做到了。 Drupal会提供一些帮助来避免最常见的安全错误,但是您仍然可以做一些不安全的事情(如与不受信任的第三方共享数据或假设响应数据始终安全)。

+0

中检索数据我承认这不是最佳做法。在这种特殊情况下,我们控制着网站和API,我们正在检索至多100个字符的内容来填充几个字段。由于没有用户交互和内容太少,过去我只是在模板中插入一些PHP来进行所需的API调用。看起来,这是更加锁定与树枝,所以我可能会按照你的意见,并创建一个模块来完成这项工作。对于那些内容非常少的内容而言,它看起来就像很多代码。 – raf