У page.html.twig
вас будет рабочая {{ base_path }}
переменная. Почему это не доступно в каждом шаблоне, я понятия не имею. Как мне кажется, и все остальное выглядит неопрятно, я предпочитаю делать то же, что и Drupal, в функции страницы предварительной обработки для любого места, где оно мне нужно.
Чтобы сделать {{ base_path }}
доступными блокировку шаблонов в теме с именем example, добавьте этот код в example.theme
файл:
/**
* Implements hook_preprocess_block().
*/
function example_preprocess_block(&$variables) {
$variables['base_path'] = base_path();
}
Как отмечено в принятом ответе, предоставленном MPD, если вы получаете URL узла или другого объекта, есть способы сделать все это за вас.
Однако есть причины для получения base_path, например, при отображении изображений, которые находятся в папке вашей темы. {{ directory }}
предоставляет путь к папке темы, но он не учитывает базовый путь (обычно это просто /, но для того, чтобы сохранить правильное функционирование Drupal из подкаталога домена, который не должен быть жестко закодирован). На page.html.twig
любом шаблоне, в котором есть вышеуказанный препроцессор, это будет работать для этой цели:
<img src="{{ base_path ~ directory }}/images/nsf1.svg"
alt="National Science Foundation logo" height="80" width="80" />
И, конечно, ответ Шона Конна работает хорошо, если вы можете подавить свое желание красивых шаблонов, но я не смог.