>  기사  >  PHP 프레임워크  >  Laravel 파사드와 서비스 제공자의 차이점

Laravel 파사드와 서비스 제공자의 차이점

藏色散人
藏色散人원래의
2019-08-06 11:16:042501검색

Laravel 파사드와 서비스 제공자의 차이점

laravel 파사드 모드와 서비스 공급자의 차이점

Laravel의 자체 파일 시스템을 예로 들어 config/app.php 구성 파일의 공급자 배열에 서비스 공급자가 등록됩니다.

Illuminate\Filesystem\FilesystemServiceProvider::class,

는 별칭 배열에 파사드를 정의합니다:

‘File’ => Illuminate\Support\Facades\File::class,

이 두 단계를 통해 우리는 Laravel에서 제공하는 파일 시스템 관련 작업을 매우 편리하게 사용할 수 있으며 호출 형식은 다음과 같이 매우 간단합니다:

File::exist ($path),判断文件是否存在。
File::get ($path, $lock = false),获取一个文件的内容。
File::append ($path, $data),把内容追加到一个文件末尾。
File::files ($directory),获取一个目录下所有文件。

그러면 다음과 같습니다. 어떻게? Laravel의 서비스 제공자와 Facade 모드에 대해 각각 이야기해 보겠습니다.

Service Provider

먼저 정의를 살펴보겠습니다.

Service Provider는 모든 Laravel 애플리케이션이 시작되는 중심입니다. 자체 애플리케이션을 포함한 모든 핵심 Laravel 서비스는 서비스 제공자를 통해 시작됩니다.

파일 시스템 서비스 공급자의

위치에서 싱글톤이 등록 메서드에 바인딩되어 있음을 볼 수 있습니다. /vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php

protected function registerNativeFilesystem()
{
    $this->app->singleton('files', function () {
        return new Filesystem;
    });
}

이 싱글톤은 Filesystem 클래스의 싱글톤 모드입니다. 물론 이 서비스 제공자는 다른 싱글톤을 바인딩하거나 더 많은 작업을 수행할 수도 있습니다. 여기서는 File::exist() 호출 메서드의 원리만 연구합니다.

그리고 실제로는 Filesystem 클래스의 인스턴스인 파일의 단일 인스턴스가 있습니다.

이때 Facade가 없으면 Filesystem 인스턴스의 메소드를 다음과 같이 호출할 수도 있습니다.

app(‘files’)->exist($path)

자, 이제 Facade에 대해 이야기해 보겠습니다.

Facade Facade 모드

먼저 소개를 살펴보겠습니다.

Facades /fəˈsäd/는 애플리케이션의 서비스 컨테이너에서 사용할 수 있는 클래스에 "정적" 인터페이스를 제공합니다. Laravel에는 거의 모든 서비스에 액세스하는 데 사용할 수 있는 다양한 Facade가 포함되어 있습니다. Laravel 파사드는 서비스 컨테이너의 기본 클래스에 대한 "정적 프록시"입니다. 전통적인 정적 메소드 호출과 비교하여 파사드는 더 간단하고 풍부한 구문을 제공하는 동시에 더 나은 테스트 가능성과 확장성을 제공합니다.

이 글의 시작 부분에서 별칭 배열이 파일을 정의한다고 언급했습니다. 특정 클래스는

Illuminate\Support\Facades\File::class,

내용은 다음과 같습니다.

class File extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'files';
    }
}

파일 이름은 방금 바인딩된 싱글톤이 아닙니다. . 패턴의 이름은? 좋아요.

이런 방식으로 File 별칭이나 Facade를 사용하여 이 Filesystem 인스턴스의 메서드를 호출할 수 있습니다.

이 글을 통해 서비스 제공자와 Facade, 실제로 호출되는 클래스의 인스턴스 간의 관계를 이해할 수 있기를 바랍니다.

더 많은 Laravel 관련 기술 기사를 보려면

Laravel Framework Getting Started Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 Laravel 파사드와 서비스 제공자의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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