Moja strona znajduje się na http: //drupal8.local/ . Jak uzyskać część drupal8.local tego adresu URL?
Url::fromRoute('<'current'>')
lub base_path()
zwraca część parth adresu URL; Na przykład dla http: //drupal8.local/a/b/c/d/e/f zwracają „, /a/b/c/d/e/f'
gdy tylko muszę to uzyskać 'drupal8.local'
.
Jak mogę uzyskać tę część adresu URL?
Odpowiedzi:
Możesz uzyskać nazwę hosta „drupal8.local” bezpośrednio z
getHost()
żądania:W niektórych przypadkach możesz również chcieć uzyskać schemat, fx
https://drupal8.local
:źródło
\Drupal::request()->getSchemeAndHttpHost()
wrócihttp://drupal8.local
.Url::fromRoute('<front>', [], ['absolute' => TRUE]);
Istnieją pewne ostrzeżenia dotyczące bezpośredniego dostępu do obiektu żądania w ten sposób w
\Drupal::request
:Każdy kontroler formularzy rozszerzający się
\Drupal\Core\Form\FormBase
automatycznie ma wstrzykiwaną tę zależność i można uzyskać do niego dostęp za pomocą:Myślę (ale nie przetestowałem), że zwykłe rozszerzenie kontrolera strony
\Drupal\Core\Controller\ControllerBase
może zapewnićrequest_stack
usługę, zastępując\Drupal\Core\Controller\ControllerBase::create
funkcję, a następnie ustawiając$request
właściwość w konstruktorze. Jest to bardzo dobrze opisane dla formularzy i ten sam proces powinien mieć zastosowanie do kontrolerów stron: https://www.drupal.org/docs/8/api/services-and-dependency-injection/dependency-injection-for-a- tworzą .źródło
Biorąc pod uwagę „ ostrzeżenia o bezpośrednim dostępie do obiektu żądania w ten sposób w \ Drupal :: request ”, o których wspomniał Shaun Dychko , być może dobrą opcją uzyskania nazwy hosta jest uzyskanie jej ze zmiennej globalnej $ base_url za pomocą php funkcja parse_url :
źródło
Jeśli chcesz to zrobić za pomocą wstrzykiwania zależności i usługi, możesz użyć RequestStack :
I zdefiniuj to w następujący sposób:
A następnie zadeklaruj to w ten sposób:
źródło