কীভাবে কোনও সাইটের বেস ইউআরএল পাবেন


34

আমার সাইটটি http: //drupal8.local/ এ রয়েছে । আমি কীভাবে ইউআরএল এর drupal8.local অংশ পেতে পারি ?

Url::fromRoute('<'current'>')বা base_path()URL এর পাথ পার্থ ফেরত দেয়; উদাহরণস্বরূপ, http: //drupal8.local/a/b/c/d/e/f- এর জন্য , তারা 'ফিরে আসে /a/b/c/d/e/f'যখন আমার কেবল দরকার 'drupal8.local'

আমি কীভাবে ইউআরএল এর অংশ পেতে পারি?


2
আপনি কি আসলে হোস্টনাম বা বেস ইউআরএল বোঝাচ্ছেন? মূল ইউআরএলটিতে যখন রুট ডিরেক্টরিতে ড্রুপাল চালিত না হয় তখন পাথ অংশগুলি অন্তর্ভুক্ত করতে পারে।
এমপিডোনাদিও

উত্তর:


66

getHost()অনুরোধ থেকে সরাসরি আপনি "drupal8.local" হোস্টনামটি পেতে পারেন :

$host = \Drupal::request()->getHost();

কিছু ক্ষেত্রে আপনি স্কিমাটিও পেতে চাইতে পারেন, fx https://drupal8.local:

$host = \Drupal::request()->getSchemeAndHttpHost();

36
দ্রষ্টব্য: \Drupal::request()->getSchemeAndHttpHost()ফিরে আসবে http://drupal8.local
টিম

10
নোট করুন যদি আপনার সাইটটি কোনও সাবপথে রয়েছে (যেমন আপনার হোমপৃষ্ঠা drupal8.local / uk এ রয়েছে ), এটি সাবপথটি ফেরত দেবে না। এটি করতে আপনি ব্যবহার করতে পারেনUrl::fromRoute('<front>', [], ['absolute' => TRUE]);
leon.nk

1
লেওন.এনকে থেকে মন্তব্যগুলিকে উজ্জীবিত করছে ইউআরএল আপনাকে সাব-ডিরেক্টরি এবং যে কোনও বন্দর পেতে চলেছে যদি আপনি অ-মানক পোর্টে থাকেন। এবং, ইউআরএল জেনারেটর দ্বারা প্রতিস্থাপিত হয়। আপডেট হওয়া কোডটি হ'ল: rup দ্রুপাল :: ইউরাল জেনারেটর () -> জেনারেটফ্রুমরোউট ('<ফ্রন্ট>', [], ['পরম' => সত্য]);
জেসন ইয়ারিংটন 16

2
ড্রশ (সংস্করণ 8) থেকে এটি চালানো ফল দেয়: ডিফল্ট।
জাস্টমে

1
সঠিক @ জাস্টমে - ড্রাশ একটি কমান্ড লাইনের সরঞ্জাম তাই স্বাভাবিকভাবেই কোনও পোষ্ট হোস্ট নেই
ক্লাইভ

6

অনুরোধের বস্তুটিতে সরাসরি এইভাবে অ্যাক্সেস সম্পর্কে কিছু সতর্কতা রয়েছে \Drupal::request:

 * Note: The use of this wrapper in particular is especially discouraged. Most
 * code should not need to access the request directly.  Doing so means it
 * will only function when handling an HTTP request, and will require special
 * modification or wrapping when run from a command line tool, from certain
 * queue processors, or from automated tests.
 *
 * If code must access the request, it is considerably better to register
 * an object with the Service Container and give it a setRequest() method
 * that is configured to run when the service is created.  That way, the
 * correct request object can always be provided by the container and the
 * service can still be unit tested.

যে কোনও ফর্ম নিয়ামক \Drupal\Core\Form\FormBaseস্বয়ংক্রিয়ভাবে প্রসারিত হ'ল এই নির্ভরতা ইনজেকশন রয়েছে এবং এটি ব্যবহার করে অ্যাক্সেস করা যেতে পারে:

$this->getRequest()->getSchemeAndHttpHost()

আমি মনে করি (তবে পরীক্ষিত হয়নি) যে নিয়মিত পৃষ্ঠা নিয়ামক প্রসারিত ফাংশনটি ওভাররাইড করে এবং তারপরে কনস্ট্রাক্টরে একটি সম্পত্তি সেট \Drupal\Core\Controller\ControllerBaseকরে request_stackপরিষেবা সরবরাহ করতে পারে । এটি ফর্মগুলির জন্য সত্যই ভালভাবে বর্ণনা করা হয়েছে, এবং একই প্রক্রিয়াটি পৃষ্ঠা নিয়ন্ত্রকদের জন্য প্রয়োগ করা উচিত: https://www.drupal.org/docs/8/api/services-and-d dependency- inication/ d dependency-inication-for-a- a- ফর্ম\Drupal\Core\Controller\ControllerBase::create$request


4

শন ডাইচকো উল্লেখ করেছেন যে " way দ্রুপাল :: অনুরোধে এইভাবে অনুরোধের অবজেক্টটিতে সরাসরি অ্যাক্সেস করার বিষয়ে সতর্কতা " বিবেচনা করে , হোস্টনেম পাওয়ার জন্য সম্ভবত একটি ভাল বিকল্পটি পিএইচপি-র সহায়তায় $ বেস_আরল গ্লোবাল ভেরিয়েবলের কাছ থেকে পাওয়া যাবে ফাংশন parse_url :

global $base_url;
$base_url_parts = parse_url($base_url);
$host = $base_url_parts['host'];

1

আপনি যদি নির্ভরতা ইনজেকশন এবং কোনও পরিষেবা দিয়ে এটি করতে চান তবে আপনি অনুরোধস্ট্যাক ব্যবহার করতে পারেন :

use Symfony\Component\HttpFoundation\RequestStack;

এবং এটি এর মতো সংজ্ঞা দিন:

protected $request;

public function __construct(..., RequestStack $request_stack) {
  ...
  $this->request = $request_stack->getCurrentRequest();
}

public static function create(ContainerInterface $container, ...) {
  return new static(
    ...
    $container->get('request_stack')
  )
}

এবং তারপরে এটি ঘোষণা করুন:

$this->request->getHost()
$this->request->getSchemeAndHttpHost()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.