laravel框架中自带文件系统的相关操作的使用是非常方便的,那么这是如何实现的呢?接下来的这篇文章php中文网将给大家来详细的说明一下这里面的原理,话不多说,让我们直接来看文章的内容。
先来一个引子:
以 Laravel 自带的文件系统为例,在 config/app.php 的配置文件的 providers 数组中,注册了一个服务提供者:
IlluminateFilesystemFilesystemServiceProvider::class,
在 alias 数组中定义了一个门面:
‘File’ => IlluminateSupportFacadesFile::class,
通过这两个步骤,我们就可以非常方便的使用 Laravel 提供的文件系统相关的操作,而且调用形式很简洁,如:
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() 这种调用方式的原理。
那么这样一来就有个 files 的单例,实际上是 Filesystem 这个类的实例。
此时,如果没有 Facade,也是可以调用到 Filesystem 这个实例的方法的,那就是这样调用:
app(‘files’)->exist($path)
好了,现在开始讲 Facade.
Facade 门面模式
Facades 为应用程序的服务容器中可用的类提供了一个「静态」接口。Laravel 自带了许多的 facades,可以用来访问其几乎所有的服务。Laravel facades 就是服务容器里那些基类的「静态代理」,相比于传统的静态方法调用,facades 在提供更简洁且丰富的语法的同时,还有更好的可测试性和扩展性。
本文一开始讲到 alias 数组定义了一个 File,具体的类是
IlluminateSupportFacadesFile::class,
它的内容是:
class File extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'files'; } }
它实际上返回了一个名称,注意这个名称 files,不就是刚刚绑定的单例模式的名称吗?没错。
这样一来,就可以使用 File 这个别名或者说门面,来调用这个 Filesystem 实例中的方法了。
通过本文,希望大家能够了解服务提供者,Facade,和实际调用的类的实例之间的关系。
以上就是本篇文章的全部内容了,更多laravel内容请关注laravel框架入门教程。
相关文章推荐:
Laravel框架中辅助函数:optional ()函数的介绍
相关课程推荐:
Atas ialah kandungan terperinci Laravel框架中服务提供者和门面模式(Facade)的用法(代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Bertindak balas, vue, andangularcanbeintegratedwithlaravelbyfollowingspecificsetupsteps.1) forreact: installreactusinglaravelui, setupcomponentsinapp.js.2)

TaskManagementToolSareessfectiveFectiveremoteprojectmanagementbyprioritizingTasksandTrackingProgress.1) usetoolsliketrelloandasanatosetprioritieswithlabelsortags.2) prokertoolslikejiraandmondy.com

Laravel101hancesperformanceRoughseralkeyfeatures.1) itIntroduceSquerybuilderCachingtoreDuceeduceedataBaseload.2) itOpTimizeSeSeloquentModeLeloadingWithLazyLoadingProxies.3)

Strategi penggunaan aplikasi Laravel yang terbaik termasuk: 1. 1. Zero Downtime Deployment menggunakan Envoy atau Deployer untuk mengautomasikan proses penempatan untuk memastikan aplikasi tetap tersedia apabila dikemas kini. 2. Penyebaran biru dan hijau membolehkan penempatan downtime dengan mengekalkan dua persekitaran dan membolehkan pengembalian cepat. 3. Penggunaan berterusan mengautomasikan keseluruhan proses penempatan melalui githubactions atau gitlabci/cd. 4. Canary melepaskan melalui konfigurasi Nginx, secara beransur -ansur mempromosikan versi baru kepada pengguna untuk memastikan pengoptimuman prestasi dan pengembalian cepat.

Toscalealaravelapplicationefectively, focusondatabasesharding, caching, loadbosting, andmicroservices.1) pelaksanaanDataBaseshardingTodistributedataacrossmultipledatabasesforimprovedperformance.2)

TooverComeComeCommunicationBarriersAndistributedTeams, Gunakan: 1) videocallsforface-to-faceinteraction, 2) setclearResponsetimeexpectations, 3) chooseapproprateCommunicationTools, 4) createeAteamCommunicationGuide, dan5)

Laravelbladeenhancesfrontendtemplatinginfull-stackprojectsbyofferingcleansyntaxandpowerfeatures.1) itallowsforeasyvariabledisplayandControlstructures.2)

Laravelisidealffull-stackapplicationsduetoitselegantsyntax, comprehensiveecosystem, andpowerfeatures.1) useeloquentormforintuitiveBackenddatamanipulation, butavoidn 1queryissues.2) prajuritas


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa
