I'm dumb and this is embarrassing, but I'm trying to figure out how I properly use a method from a class in other parts of my code. I need to understand the Drupal way, if not just the php way.
I have a class like this...
namespace Drupal\module_name\Utilities;
use GuzzleHttp\Exception\RequestException;
use Drupal\Core\Logger\LoggerChannelFactory;
use Drupal\Core\Messenger\MessengerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use GuzzleHttp\ClientInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
class Example implements ContainerInjectionInterface {
private $client;
protected $loggerFactory;
protected $messenger;
protected $config;
public function __construct(
LoggerChannelFactory $loggerFactory,
MessengerInterface $messenger,
ClientInterface $client,
ConfigFactoryInterface $config
) {
$this->loggerFactory = $loggerFactory->get('simple_mailchimp');
$this->messenger = $messenger;
$this->client = $client;
$this->config = $config->get('module_name.settings');
}
public static function create(ContainerInterface $container) {
return new static(
$container->get('logger.factory'),
$container->get('messenger'),
$container->get('http_client'),
$container->get('config.factory')
);
}
public function request() {
return 'whatever';
}
}
What's the proper way to use this class somewhere else? For instance, in another module, I want to call the request() method shown above.
$example = new Example();
$x = $example->request();
This doesn't work, as shown above. I get this...
ArgumentCountError: Too few arguments to function Drupal\module_name\Utilities\Example::__construct(), 0 passed... and exactly 4 expected
(Even though it seemed to have worked at one time.)
That said, what's the right way to go about this with Drupal, or in general, I guess?
implements ContainerInjectionInterface {
part. Then its justclass Example {
and in there create and construct.['@logger.factory', '@messenger', '@http_client', '@config.factory']