I'm quite new to Laminas API tools, i'd like to understand how inject properly a service into my rest service.
Example:
namespace account\V1\Rest\Users;
use Laminas\ApiTools\DbConnectedResource;
class UsersResource extends DbConnectedResource {
/**
* Create a resource
*
* @param mixed $data
* @return ApiProblem|mixed
*/
public function create($data) {
$dataFiltered = $this->retrieveData($data);
$this->table->createUser($dataFiltered);
$id = $this->table->getLastInsertValue();
$user = $this->fetch($id);
// send email to user
return $user;
}
I need to implement something in // send email to user
to call the send method of the next class
namespace account\Core\Mail;
class Mail {
protected $service;
protected $message;
protected $body;
public function __construct(MailgunService $service) {
$this->service = $service;
$this->message = new \Laminas\Mail\Message();
$this->body = new \Laminas\Mime\Message();
}
private function updateBody() {
$this->message->setBody($this->body);
}
public function addPart($part, $partType) {
$mailPart = new \Laminas\Mime\Part($part);
$mailPart->type = $partType;
$this->body->addPart($mailPart);
$this->updateBody();
}
public function setMessage($to, $from, $subj) {
$this->message
->setTo($to)
->setFrom($from)
->setSubject($subj);
}
public function send() {
$this->service->send($message);
}
}
(The Mail class has a factory like below (Also UsersResource but i dont know if its important))
namespace account\Core\Mail;
use Psr\Container\ContainerInterface;
class MailFactory
{
public function __invoke(ContainerInterface $container)
{
return new Mail(
$container->get(\SlmMail\Service\MailgunService::class)
);
}
}
I checked the laminas-servicemanager but dont know how to proceed, any hints?
If I understand you correctly you want to inject a service into the mail class?
That would be exactly what the factory is for:
And in your factory you inject the service like so:
In order for this to work the ServiceManager needs to know about the new Service. and that the Mail class should be built using the MailFactory