master

laravel/framework

Last updated at: 29/12/2023 09:22

FilesystemServiceProvider.php

TLDR

The FilesystemServiceProvider.php file in the Illuminate\Filesystem namespace is a service provider that registers the native and driver-based filesystem implementations in the Laravel application.

Methods

register

This method is responsible for registering the service provider. It calls the registerNativeFilesystem and registerFlysystem methods.

registerNativeFilesystem

This method registers the native filesystem implementation by binding the 'files' key to a closure that returns a new instance of the Filesystem class.

registerFlysystem

This method registers the driver based filesystem. It calls the registerManager method and then binds the 'filesystem.disk' and 'filesystem.cloud' keys to closures that return the disk instances based on the default driver and the cloud driver configurations, respectively.

registerManager

This method registers the filesystem manager by binding the 'filesystem' key to a closure that returns a new instance of the FilesystemManager class.

getDefaultDriver

This method returns the default file driver configured in the application's filesystems configuration.

getCloudDriver

This method returns the default cloud-based file driver configured in the application's filesystems configuration.

Classes

FilesystemServiceProvider

The FilesystemServiceProvider class is a Laravel service provider that registers the native and driver-based filesystem implementations. It extends the ServiceProvider class and overrides the register method to call the necessary registration methods.

<?php

namespace Illuminate\Filesystem;

use Illuminate\Support\ServiceProvider;

class FilesystemServiceProvider extends ServiceProvider
{
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->registerNativeFilesystem();

        $this->registerFlysystem();
    }

    /**
     * Register the native filesystem implementation.
     *
     * @return void
     */
    protected function registerNativeFilesystem()
    {
        $this->app->singleton('files', function () {
            return new Filesystem;
        });
    }

    /**
     * Register the driver based filesystem.
     *
     * @return void
     */
    protected function registerFlysystem()
    {
        $this->registerManager();

        $this->app->singleton('filesystem.disk', function ($app) {
            return $app['filesystem']->disk($this->getDefaultDriver());
        });

        $this->app->singleton('filesystem.cloud', function ($app) {
            return $app['filesystem']->disk($this->getCloudDriver());
        });
    }

    /**
     * Register the filesystem manager.
     *
     * @return void
     */
    protected function registerManager()
    {
        $this->app->singleton('filesystem', function ($app) {
            return new FilesystemManager($app);
        });
    }

    /**
     * Get the default file driver.
     *
     * @return string
     */
    protected function getDefaultDriver()
    {
        return $this->app['config']['filesystems.default'];
    }

    /**
     * Get the default cloud based file driver.
     *
     * @return string
     */
    protected function getCloudDriver()
    {
        return $this->app['config']['filesystems.cloud'];
    }
}