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 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!