>백엔드 개발 >PHP 튜토리얼 >URL의 루트 주소를 생성하기 위해 Laravel에서 url() 함수를 수정하는 방법 소개

URL의 루트 주소를 생성하기 위해 Laravel에서 url() 함수를 수정하는 방법 소개

巴扎黑
巴扎黑원래의
2017-08-12 10:59:191585검색

이 글에서는 URL 루트 주소를 생성하기 위해 Laravel에서 url() 함수를 수정하는 방법에 대한 관련 정보를 주로 소개합니다. 이 글에서는 누구나 배울 수 있는 참고 학습 가치가 있습니다. laravel을 사용하세요. 친구 여러분, 편집자를 따라 함께 배워보세요.

머리말

이 글에서는 URL의 루트 주소를 생성하기 위해 Laravel의 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;
 });
}

이는 언제든지 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의 소스 코드 문서는 매우 훌륭하고, 읽기에도 매우 명확하며, 많은 것을 배울 수 있습니다.

위 내용은 URL의 루트 주소를 생성하기 위해 Laravel에서 url() 함수를 수정하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.