2016-06-09 2 views
0

Я создаю сайт Drupal 8 и новичок в шаблоне шаблонов для завивки волос. Для одного определенного типа контента я хотел бы сделать вызов внешнего resti api и отобразить некоторые из возвращаемых данных в виде полей в шаблоне ветви.Заполните шаблон прута из внешнего api

У меня есть внутренний идентификатор, чтобы взывать к API, и я хотел бы, чтобы встроить в шаблон:

  • АНИ вызов
  • установить несколько переменных из вызова
  • Отрендерьте результат (с некоторой логикой, если он не существует)

Это что-то, что легко сделать с веточкой и drupal 8? Как второстепенный вопрос, безопасно ли это?

Альтернативой на этом этапе является создание небольшого модуля Drupal 8, но поскольку на странице нет пользовательского ввода, а только рендеринга из возвращенного вызова api, я подумал, что было бы проще иметь все это в одном месте.

+0

Twig - это только шаблонный движок, ему все равно, откуда берутся данные. Он несет ответственность только за результат ... Так что если ваш вопрос, если веточка может это сделать, тогда да. – DarkBee

+0

Вы говорите, что я могу просто сбросить php-вызов в середине шаблона? Это безопасно? На что это похоже? – raf

+0

Если вы хотите выполнить вызов API изнутри, вам нужно будет [увеличить твиг] (http://twig.sensiolabs.org/doc/advanced.html) и создать функцию, которая извлекает данные из 'API' – DarkBee

ответ

0

В Drupal 7 было возможно, но плохой дизайн, чтобы помещать произвольный PHP в шаблон. В Drupal 8 было сделано трудно сделать намеренно. Вам не следует пытаться выполнять произвольный PHP в ваших Twig-файлах или делать удаленные вызовы API, которые находятся в конце обработки запроса.

Вы должны позвонить API и собрать данные до. Вы достигаете ветки. Вы должны создать настраиваемый модуль, который обрабатывает взаимодействие с API и помещает ответ в поле, блок или другую структуру для рендеринга в соответствующем контексте (часто пользовательский блок хорошо работает для таких вещей, но именно тот подход имеет наибольший смысл зависит от вашего проекта). Вы также должны помнить, что любая страница, требующая удаленного вызова API, скорее всего, будет медленной, если этот вызов API не будет очень простым и очень быстрым. Модуль BigPipe может помочь вам решить эти проблемы со скоростью, но потребует дополнительной кривой обучения.

Если вы хотите, чтобы браузер обрабатывал вызов API, вам нужно создать div (или подобную разметку) для размещения результатов и прикрепить JavaScript к структуре и сделать фактический вызов API после большей части страницы загрузка завершена.

Что касается безопасности: он безопасен, как вы его делаете. Drupal предоставит некоторую помощь, чтобы избежать наиболее распространенных ошибок безопасности, но вы все равно можете делать то, что сделало бы его небезопасным (например, совместное использование данных с ненадежной третьей стороной или при условии, что данные ответа всегда безопасны).

+0

Я признаю, что это не лучшая практика. В этом конкретном случае мы контролируем как сайт, так и API, и мы извлекаем не более 100 символов содержимого для заполнения нескольких полей. Поскольку нет взаимодействия с пользователем и такого небольшого контента, я бы в прошлом просто вставлял некоторый PHP в шаблон, чтобы сделать желаемый вызов API. Похоже, что несколько больше заблокирован веткой, поэтому я, вероятно, последую вашим советам и создаю модуль для выполнения этой работы. Это просто похоже на много кода для того, что будет довольно небольшим количеством контента. – raf