Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email ZF2定义发送电子邮件的服务_Email_Service_Zend Framework2 - Fatal编程技术网

Email ZF2定义发送电子邮件的服务

Email ZF2定义发送电子邮件的服务,email,service,zend-framework2,Email,Service,Zend Framework2,我正在从我的ZF2应用程序发送电子邮件。我想将其创建为一个服务,以便可以从任何模块和任何控制器使用它 我有代码发送电子邮件,需要指导创建服务 protected function sendEMail($msgSubj,$msgText, $fromEmail, $toEmail) { $mail = new Mail\Message(); $mail->setFrom($fromEmail, $fromEmail); $mail->addTo($toEmail

我正在从我的ZF2应用程序发送电子邮件。我想将其创建为一个服务,以便可以从任何模块和任何控制器使用它

我有代码发送电子邮件,需要指导创建服务

protected function sendEMail($msgSubj,$msgText, $fromEmail, $toEmail) {
    $mail = new Mail\Message();
    $mail->setFrom($fromEmail, $fromEmail);
    $mail->addTo($toEmail, $toEmail);
    $mail->setSubject($msgSubj);
    $mail->setBody($msgText);
    $transport = new Mail\Transport\Sendmail();
    $transport->send($mail);
    return true;
}
我目前正在其中一个控制器中定义此功能以发送电子邮件。然而,我的应用程序正在发展,我需要从多个模块和模块内的多个控制器发送应用程序。 我明白,如果我将发送电子邮件定义为一项服务,并根据需要呼叫它,这将更容易。我已经阅读了文档,它相当沉重。我正在寻找有人做过类似事情的例子。 提前感谢您抽出时间

2014年5月11日第二次编辑 我已经做了以下工作

1> 使用以下代码创建了一个新的服务类SendEmail

namespace Application\Service;


class SendEmail {

    public function __construct()
    {
    }

    protected function sendEMail($msgSubj,$msgText, $fromEmail, $toEmail) {
        $mail = new \Zend\Mail\Message();
        $mail->setFrom($fromEmail, $fromEmail);
        $mail->addTo($toEmail, $toEmail);
        $mail->setSubject($msgSubj);
        $mail->setBody($msgText);
        $transport = new \Zend\Mail\Transport\Sendmail();
        $transport->send($mail);
        return true;
    }

}
$sendEmail = $this->getSendEmail( );
$sendEmail->sendEMail("subject of email","email body message", "from@email.com", "to@email.com");
$sendEmail = $this->getSendEmail( );
$sendEmail->sendEMail("subject of email","email body message", "from@email.com", "to@email.com");
2> 在module.config.php中为应用程序模块定义了一个条目 在“服务经理”->“工厂”下

3> 在IndexController中定义了函数

public function getSendEmail( ) {
    if ( !$this->sendEmail ) {
        $this->sendEmail = $this->getServiceLocator( )->get( 'SendEmail' );
    }
    return $this->sendEmail;
}
public function getSendEmail( ) {
    if ( !$this->sendEmail ) {
        $this->sendEmail = $this->getServiceLocator( )->get( 'SendEmail' );
    }
    return $this->sendEmail;
}
4> 在我想发送电子邮件的地方,我有以下代码

namespace Application\Service;


class SendEmail {

    public function __construct()
    {
    }

    protected function sendEMail($msgSubj,$msgText, $fromEmail, $toEmail) {
        $mail = new \Zend\Mail\Message();
        $mail->setFrom($fromEmail, $fromEmail);
        $mail->addTo($toEmail, $toEmail);
        $mail->setSubject($msgSubj);
        $mail->setBody($msgText);
        $transport = new \Zend\Mail\Transport\Sendmail();
        $transport->send($mail);
        return true;
    }

}
$sendEmail = $this->getSendEmail( );
$sendEmail->sendEMail("subject of email","email body message", "from@email.com", "to@email.com");
$sendEmail = $this->getSendEmail( );
$sendEmail->sendEMail("subject of email","email body message", "from@email.com", "to@email.com");
5> 我将Application\Service\sendmail添加到可调用的列表中

我得到以下错误

Zend\ServiceManager\Exception\ServiceNotCreatedException
File:
/var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:1036
Message:
While attempting to create sendemail(alias: SendEmail) an invalid factory was registered for this instance type.
Stack trace:
#0 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(612): Zend\ServiceManager\ServiceManager->createFromFactory('sendemail', 'SendEmail')
#1 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(572): Zend\ServiceManager\ServiceManager->doCreate('SendEmail', 'sendemail')
#2 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(504): Zend\ServiceManager\ServiceManager->create(Array)
#3 /var/www/zf2/dwam/module/UserAdmin/src/UserAdmin/Controller/IndexController.php(123): Zend\ServiceManager\ServiceManager->get('SendEmail')
#4 /var/www/zf2/dwam/module/UserAdmin/src/UserAdmin/Controller/IndexController.php(77): UserAdmin\Controller\IndexController->getSendEmail()
#5 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83): UserAdmin\Controller\IndexController->userLoginAction()
#6 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#7 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#8 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#9 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#10 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/Mvc/DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#11 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#12 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#13 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#14 /var/www/zf2/dwam/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(316): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#15 /var/www/zf2/dwam/public/index.php(17): Zend\Mvc\Application->run()
#16 {main}
基本上还没有创建服务;我错过了什么;还有什么需要做的呢

2014年5月12日的编辑找到了解决方案;不确定这是不是最好的方法


我会要求AlexP、nikoshr、EdChum、八位大师Tad Donaghe等团队移除保留,以便我可以发布解决方案。

我已经找到了解决方案,我正在发布适合我的代码;对可以做出的任何其他改进进行评论

1> 使用以下代码创建了一个新的服务类
sendmail
命名空间
应用程序\服务

class SendEmail {

    public function sendEMail($msgSubj,$msgText, $fromEmail, $toEmail) {
        $mail = new \Zend\Mail\Message();
        $mail->setFrom($fromEmail, $fromEmail);
        $mail->addTo($toEmail, $toEmail);
        $mail->setSubject($msgSubj);
        $mail->setBody($msgText);
        $transport = new \Zend\Mail\Transport\Sendmail();
        $transport->send($mail);
        return true;
    }

}
2> 在应用程序模块的
module.php
中定义创建函数
getServiceConfig()

3> 在
IndexController

4> 在我想发送电子邮件的地方,我有以下代码

namespace Application\Service;


class SendEmail {

    public function __construct()
    {
    }

    protected function sendEMail($msgSubj,$msgText, $fromEmail, $toEmail) {
        $mail = new \Zend\Mail\Message();
        $mail->setFrom($fromEmail, $fromEmail);
        $mail->addTo($toEmail, $toEmail);
        $mail->setSubject($msgSubj);
        $mail->setBody($msgText);
        $transport = new \Zend\Mail\Transport\Sendmail();
        $transport->send($mail);
        return true;
    }

}
$sendEmail = $this->getSendEmail( );
$sendEmail->sendEMail("subject of email","email body message", "from@email.com", "to@email.com");
$sendEmail = $this->getSendEmail( );
$sendEmail->sendEMail("subject of email","email body message", "from@email.com", "to@email.com");

阅读?我已经更清楚地更新了这个问题。您可以将该类添加到Module.php文件中getServiceConfig()方法返回的“Factorys”数组中。然后在控制器中,您可以使用服务定位器获取该类,然后从SL返回的对象相应地调用sendEMail()方法。此处不需要工厂,因为它只返回实例。改为使用“可调用”。您是否建议我将\Application\Service\SendEmail()定义为可调用的。好吧,这可能是个好主意