2016-06-09 108 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