master

laravel/framework

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

ValidationServiceProvider.php

TLDR

The ValidationServiceProvider.php file is a file in the Illuminate\Validation namespace of the Illuminate\Validation package. It is a service provider that registers the validation factory, presence verifier, and uncompromised verifier.

Methods

register

This method is responsible for registering the service provider. It calls the registerPresenceVerifier, registerUncompromisedVerifier, and registerValidationFactory methods.

registerValidationFactory

This method registers the validation factory by creating a new instance of the Factory class and setting the presence verifier if it is available.

registerPresenceVerifier

This method registers the database presence verifier by creating a new instance of the DatabasePresenceVerifier class.

registerUncompromisedVerifier

This method registers the uncompromised password verifier by creating a new instance of the NotPwnedVerifier class.

provides

This method returns an array of services provided by the provider.

Classes

ValidationServiceProvider

This class extends the ServiceProvider class and implements the DeferrableProvider interface. It is responsible for registering the validation factory, presence verifier, and uncompromised verifier.

<?php

namespace Illuminate\Validation;

use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Contracts\Validation\UncompromisedVerifier;
use Illuminate\Http\Client\Factory as HttpFactory;
use Illuminate\Support\ServiceProvider;

class ValidationServiceProvider extends ServiceProvider implements DeferrableProvider
{
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->registerPresenceVerifier();
        $this->registerUncompromisedVerifier();
        $this->registerValidationFactory();
    }

    /**
     * Register the validation factory.
     *
     * @return void
     */
    protected function registerValidationFactory()
    {
        $this->app->singleton('validator', function ($app) {
            $validator = new Factory($app['translator'], $app);

            // The validation presence verifier is responsible for determining the existence of
            // values in a given data collection which is typically a relational database or
            // other persistent data stores. It is used to check for "uniqueness" as well.
            if (isset($app['db'], $app['validation.presence'])) {
                $validator->setPresenceVerifier($app['validation.presence']);
            }

            return $validator;
        });
    }

    /**
     * Register the database presence verifier.
     *
     * @return void
     */
    protected function registerPresenceVerifier()
    {
        $this->app->singleton('validation.presence', function ($app) {
            return new DatabasePresenceVerifier($app['db']);
        });
    }

    /**
     * Register the uncompromised password verifier.
     *
     * @return void
     */
    protected function registerUncompromisedVerifier()
    {
        $this->app->singleton(UncompromisedVerifier::class, function ($app) {
            return new NotPwnedVerifier($app[HttpFactory::class]);
        });
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return ['validator', 'validation.presence', UncompromisedVerifier::class];
    }
}