이 글에서는 주로 Laravel의 서비스 제공자 사용 및 Facade 패턴에 대한 관련 정보를 소개하며, 자세한 예제 코드를 통해 Laravel의 서비스 제공자 및 Facade 패턴을 소개하며 이는 귀하의 학습이나 업무에 큰 의미가 있습니다. .필요한 친구들은 함께 공부할 수 있는 참고자료와 학습가치가 있습니다.
Preface
laravel에서 추가한 클래스를 사용해야 할 경우 클래스 파일을 저장할 폴더를 따로 생성하거나 laravel의 서비스 제공업체를 이용할 수 있습니다.
사실 둘 사이에는 큰 차이가 없습니다. 전자를 사용하는 경우 비즈니스 코드에 따라 달라지기 때문입니다. 컨트롤러가 많은 사용자 정의 클래스 파일을 참조한다면 종속성이 얼마나 될지 상상할 수 있습니다. 따라서 서비스 제공자 메소드를 사용하여 Laravel 컨테이너에 클래스를 등록할 수 있으며, 이 경우 종속성을 별도의 구성 파일에서 관리할 수 있어 로직 및 향후 유지 관리가 훨씬 편리해집니다.
파사드를 사용하는 이유는 클래스를 인스턴스화할 필요가 없기 때문입니다. 정적 메서드를 사용하면 클래스 메서드에 액세스할 수 있어 사용하기가 더 편리합니다. 그러나 실제로는 클래스로 직접 이동할 수 없다는 단점이 있습니다. 이 방법의 사용법을 직관적으로 이해하는 것도 불가능합니다. 개인 개발은 큰 영향을 미치지 않을 수 있지만 팀에서 개발하는 경우 사용하기가 다소 어지러울 수 있습니다.
Laravel과 함께 제공되는 파일 시스템을 예로 들면 config/app.php 구성 파일의 공급자 배열에 서비스 공급자가 등록됩니다.
Illuminate\Filesystem\FilesystemServiceProvider::class,
외관은 별칭 배열에 정의됩니다.
‘File' => Illuminate\Support\Facades\File::class,
이 두 단계를 통해 Laravel에서 제공하는 파일 시스템 관련 작업을 매우 편리하게 사용할 수 있으며 호출 형식은 다음과 같이 매우 간단합니다.
File::exist( $path )
를 사용하여 파일이 존재하는지 확인합니다. File::exist($path)
,判断文件是否存在。
File::get($path, $lock = false)
,获取一个文件的内容。
File::append($path, $data)
,把内容追加到一个文件末尾。
File::files($directory)
,获取一个目录下所有文件。
那么这是如何做到的呢?下面分别讲一讲 Laravel 的服务提供者和门面模式。
服务提供者
先看看定义:
服务提供者是所有 Laravel 应用程序启动的中心所在。包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的。
在文件系统这个服务提供者中,位置 /vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php,register 方法可以看到绑定了一个单例:
protected function registerNativeFilesystem() { $this->app->singleton('files', function () { return new Filesystem; }); }
这个单例是 Filesystem 这个类的单例模式。当然,这个服务提供者中也可以绑定其他的单例,或做更多的事情。我们这里只研究 File::exist()
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에 있는 파일 시스템 서비스 제공자에서 등록 메소드는 싱글톤이 바인딩되어 있음을 확인할 수 있습니다.
app(‘files')->exist($path)
이 싱글톤 예 Filesystem 클래스의 싱글톤 패턴입니다. 물론 이 서비스 제공자는 다른 싱글톤을 바인딩하거나 더 많은 작업을 수행할 수도 있습니다. 여기서는 File::exist()
호출 메서드의 원리만 연구합니다.
따라서 실제로는 Filesystem 클래스의 인스턴스인 단일 파일 인스턴스가 있습니다.
이때 Facade가 없으면 Filesystem 인스턴스의 메소드를 호출할 수도 있습니다. 즉, 다음과 같이 호출할 수 있습니다.
Illuminate\Support\Facades\File::class,
자, 이제 Facade에 대해 이야기해 보겠습니다.
Facade Facade 모드
Facades /fəˈsäd/는 애플리케이션의 서비스 컨테이너에서 사용할 수 있는 클래스에 대한 "정적" 인터페이스를 제공합니다. Laravel에는 거의 모든 서비스에 액세스하는 데 사용할 수 있는 많은 Facade가 포함되어 있습니다. Laravel 파사드는 서비스 컨테이너의 기본 클래스에 대한 "정적 프록시"입니다. 전통적인 정적 메소드 호출과 비교하여 파사드는 더 간단하고 풍부한 구문을 제공하는 동시에 더 나은 테스트 가능성과 확장성을 제공합니다.이 글의 시작 부분에서 별칭 배열이 파일을 정의한다고 언급했습니다. 특정 클래스는
🎜class File extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'files'; } }🎜🎜🎜 내용은 🎜🎜🎜rrreee🎜🎜🎜실제로 이름을 반환합니다. 방금 바인딩한 싱글톤 패턴의 이름이 아닌가요? 좋아요. 🎜🎜이런 방식으로 File 별칭이나 Facade를 사용하여 이 Filesystem 인스턴스의 메서드를 호출할 수 있습니다. 🎜🎜이 글을 통해 서비스 제공자와 Facade, 실제로 호출되는 클래스의 인스턴스 간의 관계를 이해할 수 있기를 바랍니다. 🎜🎜위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요! 🎜🎜관련 권장 사항: 🎜🎜🎜 Laravel Framework의 PHP 관찰자 패턴 🎜🎜🎜🎜🎜🎜🎜
위 내용은 Laravel의 서비스 제공자와 파사드 패턴에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!