2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\DependencyInjection\Loader ;
2018-11-23 12:29:20 +00:00
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator ;
2015-08-17 17:00:26 -07:00
/**
* PhpFileLoader loads service definitions from a PHP file .
*
* The PHP file is required and the $container variable can be
* used within the file to change the container .
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class PhpFileLoader extends FileLoader
{
/**
* { @ inheritdoc }
*/
public function load ( $resource , $type = null )
{
// the container and loader variables are exposed to the included file below
$container = $this -> container ;
$loader = $this ;
$path = $this -> locator -> locate ( $resource );
2018-11-23 12:29:20 +00:00
$this -> setCurrentDir ( \dirname ( $path ));
$this -> container -> fileExists ( $path );
2015-08-17 17:00:26 -07:00
2018-11-23 12:29:20 +00:00
// the closure forbids access to the private scope in the included file
$load = \Closure :: bind ( function ( $path ) use ( $container , $loader , $resource , $type ) {
return include $path ;
}, $this , ProtectedPhpFileLoader :: class );
$callback = $load ( $path );
if ( $callback instanceof \Closure ) {
$callback ( new ContainerConfigurator ( $this -> container , $this , $this -> instanceof , $path , $resource ), $this -> container , $this );
}
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
public function supports ( $resource , $type = null )
{
2018-11-23 12:29:20 +00:00
if ( ! \is_string ( $resource )) {
return false ;
}
if ( null === $type && 'php' === pathinfo ( $resource , PATHINFO_EXTENSION )) {
return true ;
}
return 'php' === $type ;
2015-08-17 17:00:26 -07:00
}
}
2018-11-23 12:29:20 +00:00
/**
* @ internal
*/
final class ProtectedPhpFileLoader extends PhpFileLoader
{
}