Drupal 8 передача глобальных переменных из настроек.php в файлы twig и / или js
мне действительно интересно, как передать мою переменную globaly (уровень страницы), чтобы ее можно было использовать в любом месте.
Что я сделал:
на моей группе Варс > Дэв.в формате YML
link: "www.anylink.com"
на моей группе Варс > прод.в формате YML
link: "www.anylink-prod.com"
на моих настройках.на PHP (J2 в)
$settings["custom_link"]={{link}};
по моему шаблону.тема
function theme_preprocess_page(&$variables) {
$variables[theme_link] = Settings::get('custom_link');
}
на моей веточке {{ theme_link }}
но он действительно не печатает ни одной строки из моего prod/dev.в формате YML.. мне было интересно, что случилось?
моя главная цель сделать это,я хочу иметь ссылки, которые печатаются в зависимости от того, в какой среде я нахожусь. надеюсь, кто-нибудь может осветить мне эту проблему, спасибо !
Ответы - Drupal 8 передача глобальных переменных из настроек.php в файлы twig и / или js / Drupal 8 Passing global variables from settings.php to twig and/or js files

25.10.2017 12:02:03
- Для глобальных веточек varibales:
Способ ООП без использования крючков:
создайте RequestListener, помещенный в (MY_MODULE / src / Event / Listener):
<?php
namespace Drupal\<MY_MODULE>\Event\Listener;
use Drupal\Core\Site\Settings;
use Drupal\Core\Template\TwigEnvironment;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class MyRequestListener
*
*/
class MyRequestListener implements EventSubscriberInterface {
/**
* @var \Drupal\Core\Template\TwigEnvironment
*/
protected $twigEnvironment;
/**
* @var \Drupal\Core\Site\Settings
*/
protected $settings;
/**
* FdeRequestListener constructor.
*/
public function __construct(TwigEnvironment $twigEnvironment,
Settings $settings) {
$this->twigEnvironment = $twigEnvironment;
$this->settings = $settings;
}
/**
* @return mixed
*/
public static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = ['onRequest'];
return $events;
}
/**
* @param GetResponseEvent $e
*/
public function onRequest(GetResponseEvent $e) {
//here you can add everything which is then globally accessible in twig templates like {{ custom_link }}
$this->twigEnvironment->addGlobal('custom_link', $this->settings->get('custom_link'));
}
}
и вы должны зарегистрировать его как сервис в своем MY_MODULE.обслуживание.в формате YML, как:
my_requestlistener:
class: Drupal\<MY_MODULE>\Event\Listener\MyRequestListener
arguments:
- @twig
- @settings
- для глобальных настроек JS:
создайте крюк в своем MY_MODULE.файл модуля:
<?php
/**
* Implements hook_js_settings_alter().
* - adds "custom_link" to the drupalSettings
*/
function my_module_js_settings_alter(array &$settings,
\Drupal\Core\Asset\AttachedAssetsInterface $assets
) {
/* @var $settings Drupal\Core\Site\Settings */
$globalSettings = \Drupal::service('settings');
//if you want to push all settings into drupalSettings JS object
$settings['all_settings'] = $globalSettings->getAll();
//if you want to push only a single value
$settings['custom_link'] = $globalSettings->get('custom_link')
}



03.11.2019 09:17:58
Fot глобальные переменные TWIG приведенный выше код не работал для меня, пока я не добавил тег event_subscriber в определение службы. Поэтому поместите в MY_MODULE.сервисы.в формате YML следующие:
my_requestlistener:
class: Drupal\<MY_MODULE>\Event\Listener\MyRequestListener
arguments: ['@twig', '@settings']
tags:
- { name: event_subscriber }