Skip to content
Snippets Groups Projects
Verified Commit 97dfd42e authored by Bartek Jaskulski's avatar Bartek Jaskulski
Browse files

feat: expose additional bindings through extensions

parent ea490813
No related branches found
No related tags found
2 merge requests!3improve into wp-hook and some additional unfinished things,!21.x
......@@ -4,12 +4,25 @@ declare(strict_types=1);
namespace WPDesk\Init\Extension;
use Psr\Container\ContainerInterface;
use WPDesk\Init\Binding\DefinitionFactory;
use WPDesk\Init\Binding\Loader\BindingDefinitions;
use WPDesk\Init\Binding\Loader\DirectoryBasedLoader;
use WPDesk\Init\Configuration\ReadableConfig;
use WPDesk\Init\DependencyInjection\ContainerBuilder;
use WPDesk\Init\Loader\PhpFileLoader;
use WPDesk\Init\Plugin\Plugin;
class BuiltinExtension implements Extension {
public function bindings(ContainerInterface $c): BindingDefinitions {
return new DirectoryBasedLoader(
__DIR__ . '/../Resources/bindings',
new PhpFileLoader(),
new DefinitionFactory()
);
}
public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void {
$builder->add_definitions( __DIR__ . '/../Resources/services.inc.php' );
}
......
......@@ -4,13 +4,34 @@ declare(strict_types=1);
namespace WPDesk\Init\Extension;
use Psr\Container\ContainerInterface;
use WPDesk\Init\Binding\DefinitionFactory;
use WPDesk\Init\Binding\Loader\ArrayBindingLoader;
use WPDesk\Init\Binding\Loader\BindingDefinitions;
use WPDesk\Init\Binding\Loader\ConfigurationBindingLoader;
use WPDesk\Init\Configuration\Configuration;
use WPDesk\Init\Configuration\ReadableConfig;
use WPDesk\Init\DependencyInjection\ContainerBuilder;
use WPDesk\Init\Loader\PhpFileLoader;
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 ConfigurationBindingLoader(
$c->get( Configuration::class ),
$c->get( Plugin::class )->get_path(),
new PhpFileLoader(),
new DefinitionFactory()
);
}
return new ArrayBindingLoader( [] );
}
public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void {
$services = array_map(
function ( $service ) use ( $plugin ) {
......
......@@ -3,6 +3,8 @@ declare(strict_types=1);
namespace WPDesk\Init\Extension;
use Psr\Container\ContainerInterface;
use WPDesk\Init\Binding\Loader\BindingDefinitions;
use WPDesk\Init\Configuration\ReadableConfig;
use WPDesk\Init\DependencyInjection\ContainerBuilder;
use WPDesk\Init\Plugin\Plugin;
......@@ -10,4 +12,6 @@ use WPDesk\Init\Plugin\Plugin;
interface Extension {
public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void;
public function bindings(ContainerInterface $c): BindingDefinitions;
}
......@@ -4,6 +4,9 @@ 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\Configuration\ReadableConfig;
use WPDesk\Init\DependencyInjection\ContainerBuilder;
use WPDesk\Init\Plugin\Plugin;
......@@ -37,4 +40,8 @@ class LegacyExtension implements Extension {
return $plugin_info;
}
public function bindings( ContainerInterface $c ): BindingDefinitions {
return new ArrayBindingLoader( [] );
}
}
......@@ -110,22 +110,9 @@ final class Kernel {
}
private function prepare_driver( ContainerInterface $container ): HookDriver {
$loader = new DirectoryBasedLoader(
__DIR__ . '/Resources/bindings/index.php',
new PhpFileLoader(),
new DefinitionFactory()
);
if ( $this->config->has( 'hook_resources_path' ) ) {
$loader = new CompositeBindingLoader( $loader );
$loader->add(
new ConfigurationBindingLoader(
$this->config,
plugin_dir_path( $this->filename ),
new PhpFileLoader(),
new DefinitionFactory()
)
);
$loader = new CompositeBindingLoader();
foreach ( $this->extensions->bindings($container) as $bindings ) {
$loader->add( $bindings );
}
$driver = new GenericDriver(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment