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 führt sie im Detail anhand des Beispielcodes ein, der einen bestimmten Referenzwert hat, den jeder lernen kann Oder verwenden Sie Laravel. Freunde, die es benötigen, folgen bitte dem Herausgeber, um gemeinsam zu lernen.
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 der Teil der von diesem Ding generierten URL, der vervollständigt werden muss, wird automatisch vom Framework basierend auf der Anfrage bestimmt, und die automatisch ermittelten Dinge gehen manchmal schief (z. B. wenn a Schicht des Reverse-Proxys 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, ist es so von Laravel Ein IlluminateContractsRoutingUrlGenerator wird aus dem Service-Container geparst und die Parameter werden an die to-Methode dieses Objekts übergeben.
Die UrlGenerator-Klasse ist an den Service-Container im Service-Provider 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 das Wir können jederzeit über die URL-Zusammenfassung auf den UrlGenerator im Service-Container zugreifen und ihn ä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, die oben genannten Codes in einem benutzerdefinierten ServiceProvider zu platzieren, sodass alle von der Funktion url() generierten Links die oben definierte Stammadresse und das oben definierte Protokoll verwenden.
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.
Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Ändern der Funktion url() in Laravel, um die Stammadresse der URL zu generieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!