この記事では主に、Laravel の url() 関数を変更して URL ルート アドレスを生成する方法について、サンプル コードを通じて詳細に紹介します。 laravel を使ってください。必要な方は以下のエディタで学習しましょう。お役に立てれば幸いです。
前書き
この記事では主に、Laravel の url() 関数を変更して URL のルートアドレスを生成する関連内容を紹介します。Larevel のヘルパーに url() があることは誰もが知っていると思います。渡すことができる関数 指定したディレクトリから完全なURLを生成する非常に便利な関数です:
// return: https://skin.dev/user/profile url('user/profile')
ただし、これで生成されるURLのうち補完すべき部分はリクエストに基づいてフレームワークが自動的に決定します。また、自動的に決定されたものがうまくいかない場合もあります (たとえば、リバース プロキシのレイヤーが使用されている場合など)。
このドキュメントには、生成される URL のルート アドレスとプロトコル ヘッダー部分 (http(s)) をカスタマイズする方法について記載されておらず、非常にイライラさせられます。だから何をすべきか?
まず、url() が定義されている場所を見てみましょう:
# 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); }
Laravel のサービスコンテナから IlluminateContractsRoutingUrlGenerator を解析し、パラメータをこのオブジェクトの to メソッドに転送していることがわかります。
そして、この UrlGenerator クラスは、サービス プロバイダー src/Illuminate/Routing/RoutingServiceProvider.php:
/** * 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; }); }
のサービス コンテナにバインドされています。これは、URL 抽象 This UrlGenerator を通じていつでもサービス コンテナにアクセスし、変更できることを意味しますそれ。
そして、必要なメソッド、forceSchema と ForceRootUrl を公開します。
url() 関数によって生成された URL のルート アドレスを変更するコードは次のとおりです:
// 用它提供的方法检测 URL 是否有效 if (app('url')->isValidUrl($rootUrl)) { app('url')->forceRootUrl($rootUrl); } // 强制生成使用 HTTPS 协议的 URL app('url')->forceSchema('https');
URL によって生成されたすべてのリンクが有効になるように、上記のコードをカスタム ServiceProvider に配置することをお勧めします。 () 関数は、上記で定義されたルート アドレスとプロトコルを使用します。
つまり、Laravel を本当にマスターするには、ドキュメントを読むだけでは十分ではありません。さらに、Laravelのソースコードドキュメントは非常に優れており、非常に読みやすく、多くのことを学ぶことができます。
関連する推奨事項:
Laravel がスケジュールされたタスクを実装する方法の詳細な説明
非同期プロセスを実行するための Laravel のスーパーバイザー実装方法の詳細な説明
以上がLaravelのurl()のルートアドレス変更の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。