Мой сайт находится на http: //drupal8.local/ . Как мне получить drupal8.local часть этого URL?
Url::fromRoute('<'current'>')
или base_path()
возвращает часть пути URL; Например, для http: //drupal8.local/a/b/c/d/e/f они возвращаются, /a/b/c/d/e/f'
когда мне просто нужно получить 'drupal8.local'
.
Как я могу получить эту часть URL?
Ответы:
Вы можете получить имя хоста "drupal8.local" непосредственно из
getHost()
запроса:В некоторых случаях вы также можете получить схему, fx
https://drupal8.local
:источник
\Drupal::request()->getSchemeAndHttpHost()
вернетсяhttp://drupal8.local
.Url::fromRoute('<front>', [], ['absolute' => TRUE]);
Есть несколько предупреждений о прямом доступе к объекту запроса следующим образом
\Drupal::request
:Любой контроллер формы, расширяющийся
\Drupal\Core\Form\FormBase
автоматически, имеет эту зависимость, и к нему можно получить доступ, используя:Я думаю (но не проверял), что обычное расширение страницы
\Drupal\Core\Controller\ControllerBase
может предоставитьrequest_stack
сервис, переопределив\Drupal\Core\Controller\ControllerBase::create
функцию, а затем установив$request
свойство в конструкторе. Это очень хорошо описано для форм, и тот же процесс должен применяться для контроллеров страниц: https://www.drupal.org/docs/8/api/services-and-dependency-injection/dependency-injection-for-a- форма .источник
Принимая во внимание « предупреждения о прямом доступе к объекту запроса таким образом в \ Drupal :: request », о которых упоминал Шон Дычко , возможно, хорошим вариантом для получения имени хоста является получение его из глобальной переменной $ base_url с помощью php функция parse_url :
источник
Если вы хотите сделать это с помощью внедрения зависимостей и службы, вы можете использовать RequestStack :
И определите это так:
А затем объявите это так:
источник