ViewServiceProvider.php
TLDR
The ViewServiceProvider.php
file is a part of the Illuminate\View namespace in the Laravel framework. It is a service provider class that registers views, view factories, view finders, and view engines.
Methods
register
The register
method is used to register the service provider. It calls several other methods to register the view factory, view finder, blade compiler, and engine resolver.
registerFactory
The registerFactory
method is responsible for registering the view factory. It creates a singleton instance of the view factory and sets the container instance and other dependencies.
createFactory
The createFactory
method creates a new instance of the Factory
class, which represents the view factory. It is responsible for creating and rendering views.
registerViewFinder
The registerViewFinder
method registers the view finder implementation. It creates a new instance of the FileViewFinder
class and binds it to the container.
registerBladeCompiler
The registerBladeCompiler
method registers the Blade compiler implementation. It creates a singleton instance of the BladeCompiler
class and configures it with the necessary dependencies.
registerEngineResolver
The registerEngineResolver
method registers the engine resolver instance. It creates a singleton instance of the EngineResolver
class and registers the file, PHP, and Blade engines with the resolver.
registerFileEngine
The registerFileEngine
method registers the file engine implementation with the engine resolver.
registerPhpEngine
The registerPhpEngine
method registers the PHP engine implementation with the engine resolver.
registerBladeEngine
The registerBladeEngine
method registers the Blade engine implementation with the engine resolver.
Classes
There are no additional classes in this file.
<?php
namespace Illuminate\View;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\Compilers\BladeCompiler;
use Illuminate\View\Engines\CompilerEngine;
use Illuminate\View\Engines\EngineResolver;
use Illuminate\View\Engines\FileEngine;
use Illuminate\View\Engines\PhpEngine;
class ViewServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerFactory();
$this->registerViewFinder();
$this->registerBladeCompiler();
$this->registerEngineResolver();
$this->app->terminating(static function () {
Component::flushCache();
});
}
/**
* Register the view environment.
*
* @return void
*/
public function registerFactory()
{
$this->app->singleton('view', function ($app) {
// Next we need to grab the engine resolver instance that will be used by the
// environment. The resolver will be used by an environment to get each of
// the various engine implementations such as plain PHP or Blade engine.
$resolver = $app['view.engine.resolver'];
$finder = $app['view.finder'];
$factory = $this->createFactory($resolver, $finder, $app['events']);
// We will also set the container instance on this view environment since the
// view composers may be classes registered in the container, which allows
// for great testable, flexible composers for the application developer.
$factory->setContainer($app);
$factory->share('app', $app);
$app->terminating(static function () {
Component::forgetFactory();
});
return $factory;
});
}
/**
* Create a new Factory Instance.
*
* @param \Illuminate\View\Engines\EngineResolver $resolver
* @param \Illuminate\View\ViewFinderInterface $finder
* @param \Illuminate\Contracts\Events\Dispatcher $events
* @return \Illuminate\View\Factory
*/
protected function createFactory($resolver, $finder, $events)
{
return new Factory($resolver, $finder, $events);
}
/**
* Register the view finder implementation.
*
* @return void
*/
public function registerViewFinder()
{
$this->app->bind('view.finder', function ($app) {
return new FileViewFinder($app['files'], $app['config']['view.paths']);
});
}
/**
* Register the Blade compiler implementation.
*
* @return void
*/
public function registerBladeCompiler()
{
$this->app->singleton('blade.compiler', function ($app) {
return tap(new BladeCompiler(
$app['files'],
$app['config']['view.compiled'],
$app['config']->get('view.relative_hash', false) ? $app->basePath() : '',
$app['config']->get('view.cache', true),
$app['config']->get('view.compiled_extension', 'php'),
), function ($blade) {
$blade->component('dynamic-component', DynamicComponent::class);
});
});
}
/**
* Register the engine resolver instance.
*
* @return void
*/
public function registerEngineResolver()
{
$this->app->singleton('view.engine.resolver', function () {
$resolver = new EngineResolver;
// Next, we will register the various view engines with the resolver so that the
// environment will resolve the engines needed for various views based on the
// extension of view file. We call a method for each of the view's engines.
foreach (['file', 'php', 'blade'] as $engine) {
$this->{'register'.ucfirst($engine).'Engine'}($resolver);
}
return $resolver;
});
}
/**
* Register the file engine implementation.
*
* @param \Illuminate\View\Engines\EngineResolver $resolver
* @return void
*/
public function registerFileEngine($resolver)
{
$resolver->register('file', function () {
return new FileEngine($this->app['files']);
});
}
/**
* Register the PHP engine implementation.
*
* @param \Illuminate\View\Engines\EngineResolver $resolver
* @return void
*/
public function registerPhpEngine($resolver)
{
$resolver->register('php', function () {
return new PhpEngine($this->app['files']);
});
}
/**
* Register the Blade engine implementation.
*
* @param \Illuminate\View\Engines\EngineResolver $resolver
* @return void
*/
public function registerBladeEngine($resolver)
{
$resolver->register('blade', function () {
$compiler = new CompilerEngine($this->app['blade.compiler'], $this->app['files']);
$this->app->terminating(static function () use ($compiler) {
$compiler->forgetCompiledOrNotExpired();
});
return $compiler;
});
}
}