<?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 ); } }