Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung zum Ändern der Stammadresse von url() in Laravel

Detaillierte Erklärung zum Ändern der Stammadresse von url() in Laravel

*文
*文Original
2018-01-03 15:17:242617Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Ändern der URL()-Funktion in Laravel ein, um die URL-Stammadresse zu generieren. Der Artikel stellt es im Detail anhand des Beispielcodes vor. Es hat einen gewissen Referenzlernwert für jeden Es ist notwendig, Laravel zu lernen oder zu verwenden. Bitte folgen Sie dem Herausgeber, um gemeinsam zu lernen. Ich hoffe, es hilft allen.

Vorwort

Dieser Artikel führt Sie hauptsächlich in den relevanten Inhalt der Änderung der Stammadresse der von der Funktion url() generierten URL ein Laravel. Ich glaube, jeder kennt es. Es gibt eine URL() in der Hilfsfunktion von Larevel, die eine vollständige URL aus dem angegebenen Verzeichnis generieren kann:

// return: https://skin.dev/user/profile
url('user/profile')

Aber die von diesem Ding generierte URL muss vervollständigt werden. Der Teil wird automatisch basierend auf der Anfrage innerhalb des Frameworks bestimmt, und was automatisch bestimmt wird, geht manchmal schief (z. B. wenn eine Reverse-Proxy-Ebene verwendet wird).

Das Dokument erwähnt nicht, wie wir die Stammadresse und den Protokoll-Header-Teil (http(s)) in der generierten URL anpassen können, was sehr frustrierend ist. Was sollen wir also tun?

Schauen wir uns zunächst an, wo url() definiert ist:

# File: src/Illuminate/Foundation/helpers.php

/**
 * Generate a url for the application.
 *
 * @param string $path
 * @param mixed $parameters
 * @param bool $secure
 * @return Illuminate\Contracts\Routing\UrlGenerator|string
 */
function url($path = null, $parameters = [], $secure = null)
{
 if (is_null($path)) {
  return app(UrlGenerator::class);
 }

 return app(UrlGenerator::class)->to($path, $parameters, $secure);
}

Wie Sie sehen können, analysiert es einen IlluminateContractsRoutingUrlGenerator aus dem Service-Container von Laravel und Übergeben Sie die Parameter an die to-Methode dieses Objekts.

Die UrlGenerator-Klasse ist an den Dienstcontainer im Dienstanbieter src/Illuminate/Routing/RoutingServiceProvider.php gebunden:

/**
 * Register the URL generator service.
 *
 * @return void
 */
protected function registerUrlGenerator()
{
 $this->app['url'] = $this->app->share(function ($app) {
  // 略

  $url = new UrlGenerator(
   $routes, $app->rebinding(
    'request', $this->requestRebinder()
   )
  );

  return $url;
 });
}

Das bedeutet, dass wir im Dienst auf den UrlGenerator zugreifen können Sie können den Container jederzeit über die URL-Zusammenfassung aufrufen und ändern.

Und es stellt die Methoden bereit, die wir brauchen: forceSchema und forceRootUrl.

Der Code zum Ändern der Stammadresse in der von der Funktion url() generierten URL lautet wie folgt:

// 用它提供的方法检测 URL 是否有效
if (app('url')->isValidUrl($rootUrl)) {
 app('url')->forceRootUrl($rootUrl);
}

// 强制生成使用 HTTPS 协议的 URL
app('url')->forceSchema('https');

Es wird empfohlen, den obigen Code zu verwenden In einem benutzerdefinierten ServiceProvider platziert. Alle von der Funktion url() generierten Links verwenden die oben definierte Stammadresse und das oben definierte Protokoll.

Um Laravel wirklich zu beherrschen, reicht es nicht aus, nur die Dokumentation zu lesen. Darüber hinaus ist die Quellcode-Dokumentation von Laravel sehr gut, sie ist sehr klar zu lesen und man kann viel lernen.

Verwandte Empfehlungen:

Detaillierte Erklärung, wie Laravel geplante Aufgaben umsetzt

Detaillierte Erläuterung der Methode von Laravel zur Implementierung des Supervisors zur Ausführung asynchroner Prozesse

Detaillierte Erläuterung der Aufgabenplanungskonsole von Laravel

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung zum Ändern der Stammadresse von url() in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn