AcMAiler como registrar serviços??

7 views
Skip to first unread message

Gustavo Villela Goulart

unread,
Aug 18, 2018, 10:54:34 PM8/18/18
to zfbr...@googlegroups.com
Prezados, boa noite.

Já perceberam que sou bem iniciante. Me tirem uma dúvida porfavor.

Service Manager --> São serviços registrados no Zend2 que ficam ativos, "escutando", e são acionados quando disparamos algum evento.
Certo?

Agora, como registrar esses serviços?

Estou tentando usar o módulo Acmailer para envio de e-mail, no manual o desenvolvedor coloca o seguinte evento:
$mailService = $sm->get('acmailer.mailservice.default');
$message = $mailService->getMessage();
$message->setSubject('This is the subject')
->addTo('foo...@example.com')
->addTo('ano...@example.com')
->addBcc('hid...@domain.com');
Onde  $sm->get('acmailer.mailservice.default') esta registrado, como registrar esse serviço, onde?

https://blog.alejandrocelaya.com/2015/06/20/emails-in-zend-framework-2-with-zf2-acmailer-version-5/
Agradeço ajudas ...

Rafael Rocha

unread,
Aug 20, 2018, 11:14:56 AM8/20/18
to zfbr...@googlegroups.com
Você deve registrar o serviço no module.php

 public function getServiceConfig() {
        return array(
            'factories' => array(
                'Navigation' => 'Application\Navigation\MyNavigationFactory',
                'SendEmail' => function ( $sm ) {
                    return new \Application\Service\SendEmail( );
                },
       )
}

--
Essa mensagem faz parte do grupo "zfbrasil" no Google Groups.
Para escrever neste grupo, envie um email para zfbr...@googlegroups.com
Para se desligar do grupo, envie um email para zfbrasil-u...@googlegroups.com
Mais informações, visite o grupo em http://groups.google.com/group/zfbrasil?hl=pt-BR
---
Você recebeu essa mensagem porque está inscrito no grupo "Zend Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para zfbrasil+u...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.


--

Gustavo V. Goulart

unread,
Aug 22, 2018, 9:15:20 AM8/22/18
to zfbr...@googlegroups.com
Opá Rafael, obrigado pela resposta.

Cara, estou certo quando digo que o serviceManager são serviços que ficam escutando um determinado evento ser executado?

Ok. Registrei o serviço no Module.php do módulo Application, vou lá e fabrico o serviço, "Fabrico o serviço", vou criar agora uma factory, certo?

Algo do tipo:

<?php
namespace Application\Factory;

use \Zend\ServiceManager\FactoryInterface;
use \Zend\ServiceManager\ServiceLocatorInterface;

class MailFactory implements FactoryInterface
{
    public function createMail(ServiceLocatorInterface $serviceLocator)
    {
        $sm  = $serviceLocator->getServiceLocator();
        $em  = $sm->get('acmailer.mailservice.default');
        return new \Application\Controller\mailController($em);
    }
}

 Agora chamo esse serviço em qualquer módulo .... Isso ta certo?

Obrigado.

Rafael Rocha

unread,
Aug 22, 2018, 3:31:54 PM8/22/18
to zfbr...@googlegroups.com
1ª Questão
O  Service Manager não fica escutando. Ele fica disponível para o Service Locator. Aqui tem uma factory do meu controller.

<?php
namespace Admin\Factory;

use Admin\Controller\UserController;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class UserControllerFactory implements FactoryInterface {

    public function createService(ServiceLocatorInterface $controllerLocator) {
        /**
         * @var ServiceLocatorInterface $serviceLocator
         */
        $serviceLocator = $controllerLocator->getServiceLocator();
        return new UserController(
                $serviceLocator->get('doctrine.entitymanager.orm_default'),
                $serviceLocator->get('zfcuser_auth_service'),
                $serviceLocator->get('viewhelpermanager'),
                $serviceLocator->get('SendEmail')
        );
    }

}
Eu chamo os serviços que eu quero para construct do objeto. Ou seja, para seu serviço ser utilizado é preciso o service locator.

2ª Questão
A factory é utilizada só em alguns momentos. No meu primeiro email eu não usei factory para criar o objeto SendEmail() ((((Na verdade usei Closure como factory mas não pense nisso agora))))

Em suma:

1. Crie um service. Algo simples como helloworld
2. Registre o serviço em  getServiceConfig  no  module.php . Use meu exemplo:
'SeuNomeServiço' => function ( $sm ) {
   return new \Application\Service\SeuServiçoHelloWorld
( );
},
3. Chame seu serviço com o service locator(nesse ponto depende como você faz, eu uso factory). Exemplo:
$serviceLocator = $controllerLocator->getServiceLocator();
$seuServiçoInstanciado = $serviceLocator->get('SeuNomeServiço')----> Neste ponto já pode usar o serviço.

Deu para ficar claro?

gvil...@gmail.com

unread,
Aug 23, 2018, 11:40:53 AM8/23/18
to zfbr...@googlegroups.com
Opá Rafael, obrigado pela resposta.

Ficou claro sim. Entendi da seguinte forma: 

O ServiceManager registra os serviços e disponoibiliza o mesmo para o ServiceLocator. O registro desses serviços devem ser feito no arquivo Module.php, de preferencia no meu modulo principal, tipo, Application, a partir daí, com esse serviço registrado e instanciado, posso usa-lo com o ServiceLocator de qualquer modulo do sistema.
É isso?

Cara, obrigado pela paciencia.
Forte abraço.

Rafael Rocha

unread,
Aug 23, 2018, 2:13:47 PM8/23/18
to zfbr...@googlegroups.com
Isso mesmo.

De nada, tamu juntos.
Reply all
Reply to author
Forward
0 new messages