From 516237c225caabb084417aab64a2ee22a4864acc Mon Sep 17 00:00:00 2001 From: Austin Passy <367897+thefrosty@users.noreply.github.com> Date: Fri, 5 Aug 2022 15:12:25 -0700 Subject: [PATCH] Allow custom PSR Container passed in to avoid WordPress errors for 3rd party packages which use psr/container ^1.0. --- src/Plugin/PluginFactory.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Plugin/PluginFactory.php b/src/Plugin/PluginFactory.php index 1b988be..a10b2c8 100644 --- a/src/Plugin/PluginFactory.php +++ b/src/Plugin/PluginFactory.php @@ -2,6 +2,8 @@ namespace TheFrosty\WpUtilities\Plugin; +use Psr\Container\ContainerInterface; + /** * Class PluginFactory * @package TheFrosty\WpUtilities\Plugin @@ -32,9 +34,10 @@ public static function getInstance(string $slug): Plugin * @param string $slug Plugin slug. * @param string|null $filename Optional. Absolute path to the main plugin file. * This should be passed if the calling file is not the main plugin file. + * @param ContainerInterface|null $container * @return Plugin A Plugin object instance. */ - public static function create(string $slug, ?string $filename = ''): Plugin + public static function create(string $slug, ?string $filename = '', ?ContainerInterface $container = null): Plugin { if (isset(self::$instances[$slug]) && self::$instances[$slug] instanceof Plugin) { return self::$instances[$slug]; @@ -55,7 +58,7 @@ public static function create(string $slug, ?string $filename = ''): Plugin ->setSlug($slug) ->setUrl(\plugin_dir_url($filename)); - $plugin = self::setContainer($plugin); + $plugin = self::setContainer($plugin, $container); $plugin->setTemplateLoader(new TemplateLoader($plugin)); self::$instances[$slug] = $plugin; @@ -66,12 +69,13 @@ public static function create(string $slug, ?string $filename = ''): Plugin * Set the Pimple\Container if it's available. * * @param Plugin $plugin + * @param ContainerInterface|null $container * @return Plugin */ - private static function setContainer(Plugin $plugin): Plugin + private static function setContainer(Plugin $plugin, ?ContainerInterface $container = null): Plugin { if (\class_exists('\Pimple\Container') && \interface_exists('\Psr\Container\ContainerInterface')) { - $plugin->setContainer(new Container()); + $plugin->setContainer($container ?? new Container()); } return $plugin;