ホームページ >バックエンド開発 >PHPチュートリアル >Laravelのurl()関数を変更してURLのルートアドレスを生成する方法の紹介

Laravelのurl()関数を変更してURLのルートアドレスを生成する方法の紹介

巴扎黑
巴扎黑オリジナル
2017-08-12 10:59:191585ブラウズ

この記事では主に、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 のサービスコンテナから IlluminateContractsRou​​tingUrlGenerator を解析し、パラメータをこのオブジェクト メソッドの 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 抽象を使用して、URLGenerator にアクセスできることを意味します。サービスコンテナを作成して変更します。

そして、必要なメソッド、forceSchema と ForceRootUrl を公開します。

url() 関数によって生成された URL のルート アドレスを変更するコードは次のとおりです:


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

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

すべてのリンクが生成されるように、上記のコードをカスタム ServiceProvider に配置することをお勧めします。 url() 関数によって定義されたルート アドレスとプロトコルが将来的に使用されます。

つまり、Laravel を本当にマスターするには、ドキュメントを読むだけでは十分ではありません。さらに、Laravelのソースコードドキュメントは非常に優れており、非常に読みやすく、多くのことを学ぶことができます。

以上がLaravelのurl()関数を変更してURLのルートアドレスを生成する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。