/**
* Widget constructor.
*
* @param string $widgetClassNameOrAlias
* @param Container $container
*/
public function __construct($widgetClassNameOrAlias, Container $container)
{
$instance = $container->make($widgetClassNameOrAlias, ['wpWidget' => $this]);
if (!in_array(WidgetInterface::class, class_implements($instance))) {
throw new RuntimeException("Incorrect widget class name or widget does not implement WidgetInterface");
}
/**
* Check if instance have listeners for wordpress
* events which should be registered while
* widget registering.
*/
if ($instance instanceof ActionInterface || $instance instanceof DataFilterInterface) {
$container->get('EventManager')->attachListeners($instance);
}
$this->getInstance = function () use($instance) {
return $instance;
};
$params = $instance->getParams();
$controlOption = [];
if ($params instanceof ControlableInterface) {
$controlOption = $params->getControlOptions();
}
parent::__construct($params->getId(), $params->getName(), $params->getOptions(), $controlOption);
}