Skip to content
Snippets Groups Projects
Select Git revision
  • 1bc680a81dc0e10b9e2f25782a085cc1b0ffc00b
  • main default protected
  • v0.10
  • 0.10.6
  • 0.10.5
  • 0.10.4
  • 0.10.3
  • 0.10.2
  • 0.10.1
  • 0.10.0
  • 0.9.1
  • 0.9.0
12 results

ConfigExtension.php

Blame
  • ConfigExtension.php 1.20 KiB
    <?php
    
    declare(strict_types=1);
    
    namespace WPDesk\Init\Extension;
    
    use Psr\Container\ContainerInterface;
    use WPDesk\Init\Binding\Loader\ArrayBindingLoader;
    use WPDesk\Init\Binding\Loader\BindingDefinitions;
    use WPDesk\Init\Binding\Loader\DirectoryBasedLoader;
    use WPDesk\Init\Configuration\Configuration;
    use WPDesk\Init\Configuration\ReadableConfig;
    use WPDesk\Init\DependencyInjection\ContainerBuilder;
    use WPDesk\Init\Plugin\Plugin;
    use WPDesk\Init\Util\Path;
    
    class ConfigExtension implements Extension {
    
    	public function bindings( ContainerInterface $c ): BindingDefinitions {
    		$config = $c->get( Configuration::class );
    		if ( $config->has( 'hook_resources_path' ) ) {
    			return new DirectoryBasedLoader(
    				( new Path( $config->get( 'hook_resources_path' ) ) )->absolute( $c->get( Plugin::class )->get_path() )
    			);
    		}
    
    		return new ArrayBindingLoader( [] );
    	}
    
    	public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void {
    		$services = array_map(
    			function ( $service ) use ( $plugin ) {
    				return (string) ( new Path( $service ) )->absolute( $plugin->get_path() );
    			},
    			(array) $config->get( 'services', [] )
    		);
    
    		$builder->add_definitions( ...$services );
    	}
    }