Situs saya ada di http: //drupal8.local/ . Bagaimana saya mendapatkan bagian drupal8.local dari URL itu?
Url::fromRoute('<'current'>')
atau base_path()
mengembalikan bagian path dari URL; Misalnya, untuk http: //drupal8.local/a/b/c/d/e/f , mereka mengembalikan ' /a/b/c/d/e/f'
ketika saya hanya perlu mendapatkannya 'drupal8.local'
.
Bagaimana saya bisa mendapatkan bagian dari URL itu?
Jawaban:
Anda bisa mendapatkan nama host, "drupal8.local", langsung dari
getHost()
permintaan:Dalam beberapa kasus Anda mungkin ingin mendapatkan skema juga, fx
https://drupal8.local
:sumber
\Drupal::request()->getSchemeAndHttpHost()
akan kembalihttp://drupal8.local
.Url::fromRoute('<front>', [], ['absolute' => TRUE]);
Ada beberapa peringatan tentang secara langsung mengakses objek permintaan dengan cara ini di
\Drupal::request
:Setiap pengontrol formulir yang diperpanjang
\Drupal\Core\Form\FormBase
secara otomatis memiliki ketergantungan ini disuntikkan, dan dapat diakses menggunakan:Saya pikir (tetapi belum diuji) bahwa perpanjangan pengontrol halaman biasa
\Drupal\Core\Controller\ControllerBase
dapat menyediakanrequest_stack
layanan dengan mengesampingkan\Drupal\Core\Controller\ControllerBase::create
fungsi, dan kemudian menetapkan$request
properti di konstruktor. Ini dijelaskan dengan sangat baik untuk formulir, dan proses yang sama harus berlaku untuk pengontrol halaman: https://www.drupal.org/docs/8/api/services-and-dependency-injection/dependency-injection-for-a- bentuk .sumber
Memperhatikan " peringatan tentang langsung mengakses objek permintaan dengan cara ini di \ Drupal :: request " yang disebutkan Shaun Dychko , mungkin opsi yang baik untuk mendapatkan nama host diperoleh dari variabel global $ base_url , dengan bantuan php fungsi parse_url :
sumber
Jika Anda ingin melakukan ini dengan injeksi dependensi dan layanan, maka Anda dapat menggunakan RequestStack :
Dan definisikan seperti ini:
Dan kemudian nyatakan seperti ini:
sumber