天16:梅勒
昨天,我们添加了一个只读Jobeet web服务。分公司现在可以创建一个帐户,但需要由管理员激活才可以使用。为了让下属得到令牌,我们仍然需要实现电子邮件通知。我们将开始做在未来。
symfob娱乐下载ony框架来与最好的PHP绑定邮件解决方案:斯威夫特梅勒。当然,symfony的图书馆是完全集成,添加了一些很酷的功能上的默认功能。ob娱乐下载
请注意
ob娱乐下载Symfony 1.3/1.4使用迅速梅勒4.1版。
发送简单的邮件
让我们首先发送一个简单的电子邮件通知下属当他的账户已经确认和给他的下属令牌。
取代激活
行动与下面的代码:
/ /应用程序/后端/模块/会员/动作/ actions.class.php类affiliateActions扩展autoAffiliateActions{公共函数executeListActivate(){美元的附属=这个美元- >getRoute()- >getObject();美元的附属- >激活();/ /发送一个邮件给下属美元的消息=这个美元- >getMailer()- >组成(数组(“jobeet@example.com”= >“Jobeet机器人”),美元的附属- >getEmail(),“Jobeet附属令牌”,< < < EOF你的Jobeet附属账户已经激活。你的令牌{美元的附属- >getToken()}。Jobeet机器人。EOF);这个美元- >getMailer()- >发送(美元的消息);这个美元- >重定向(“jobeet_affiliate”);}/ /……}
请注意
代码正常工作,你应该改变jobeet@example.com
一个真正的一个电子邮件地址。
电子邮件管理在symfony是围绕一个梅ob娱乐下载勒对象,可以从一个动作进行检索getMailer ()
方法。
的组成()
方法接受四个参数,返回一个电子邮件消息对象:
- 发件人电子邮件地址(
从
); - 收件人的电子邮件地址(es) (
来
); - 消息的主体;
- 消息的主体。
然后发送消息调用一样简单send ()
方法在梅勒实例和消息作为参数传递。作为一个快捷方式,你只能写和发送电子邮件的使用composeAndSend ()
方法。
提示
电子邮件消息的一个实例Swift_Message
类。指迅速梅勒欧宝官网下载app更多地了解这个对象,如何做更高级的东西附加文件。
配置
默认情况下,send ()
方法试图使用一个本地SMTP服务器向收件人发送消息。当然,很多事情在symfony中,这是完全可配置的。ob娱乐下载
工厂
在前几天,我们已经谈到symfony的核心对象ob娱乐下载用户
,请求
,响应
,或者是路由
。这些对象自动创建、配置和管理的symfony框架。ob娱乐下载他们总是从访问sfContext
对象,和框架中的许多事情一样,他们都是可配置的通过一个配置文件:factories.yml
。这个文件是可配置的环境。
当sfContext
初始化的核心工厂,它读取factories.yml
文件类名(类
)和参数(参数
)传递给构造函数:
响应:类:sfWebResponse参数:send_http_headers:假的
在上面的代码片段,创建响应工厂,symfony实例化一个ob娱乐下载sfWebResponse
对象,并通过send_http_headers
选择作为一个参数。
侧边栏
的sfContext
类
的sfContext
对象包含symfony核心对象的引用的请求,响应,用户,等等ob娱乐下载。作为sfContext
就像一个单例,您可以使用sfContext: getInstance ()
声明在任何地方得到它,然后可以访问任何symfony核心对象:ob娱乐下载
梅勒美元= sfContext::getInstance()- >getMailer();
当你想使用sfContext: getInstance ()
在你的课上,三思而后行,因为它引入了强耦合。很总是更好的传递所需要的对象作为参数。
您甚至可以使用sfContext
作为一个注册表和添加自己的对象使用设置()
方法。需要一个名称和一个对象作为参数get ()
方法可以稍后用于检索对象的名字:
sfContext::getInstance()- >集(“工作”,美元的工作);美元的工作= sfContext::getInstance()- >得到(“工作”);
交付策略
像许多其他核心symfony对象,梅勒是一ob娱乐下载个工厂。所以,它的配置factories.yml
配置文件。缺省配置读取如下:
梅勒:类:sfMailer参数:日志:% SF_LOGGING_ENABLED %字符集:% SF_CHARSET % delivery_strategy:实时交通:类:Swift_SmtpTransport参数:主持人:本地主机端口:25加密:~用户名:密码:~ ~
当创建一个新的应用程序,当地factories.yml
配置文件覆盖默认配置的一些合理的默认值env
和测试
环境:
测试:梅勒:param: delivery_strategy:没有开发:梅勒:param: delivery_strategy:没有
的delivery_strategy
设置告诉symfony如何传ob娱乐下载递邮件。默认情况下,symfonob娱乐下载y提供了四种不同的策略:
实时
:在即时消息被发送。single_address
:消息被发送到一个地址。线轴
:存储在队列的消息。没有一个
:消息被简单地忽略。
无论战略,邮件总是记录和可用的web调试工具栏中的“梅勒”面板。
邮件传输
发送的邮件消息实际上是一个交通工具。运输中配置factories.yml
配置文件,默认的配置使用SMTP服务器的本地机器:
交通:类:Swift_SmtpTransport参数:主持人:本地主机端口:25加密:~用户名:密码:~ ~
迅速与三种不同的运输类:梅勒捆绑在一起
Swift_SmtpTransport
:使用一个SMTP服务器发送消息。Swift_SendmailTransport
:使用sendmail
发送消息。Swift_MailTransport
:使用原生PHP邮件()
函数来发送消息。
提示
的“运输类型”斯威夫特的梅勒官方文档描述了所有你需要知道的关于内置的运输类及其不同的参数欧宝官网下载app。
测试邮件
现在,我们已经看到了如何发送一封电子邮件symfony梅勒,编写一些功能测试,以确保我们做出了正确的选择ob娱乐下载。默认情况下,symfonob娱乐下载y会注册一个梅勒
测试人员(sfMailerTester
),以缓解邮件测试功能测试。
首先,改变梅勒
工厂的配置测试
如果您的web服务器环境没有当地的SMTP服务器。我们必须替换当前Swift_SmtpTransport
类的Swift_MailTransport
:
#应用/后端/ config /工厂。yml测试:#……梅勒:param: delivery_strategy:没有运输:类:Swift_MailTransport
然后,添加一个新的测试/夹具/ administrators.yml
包含以下YAML文件定义:
sfGuardUser: admin: email_address: admin@example.com用户名:admin密码:admin first_name:法比last_name:效力is_super_admin:真的
最后,取代下属
后端应用程序功能测试文件下面的代码:
/ /测试/功能/后端/ affiliateActionsTest.php包括(目录名(__FILE__)。“/ . . / . . /引导/ functional.php”);美元的浏览器=新JobeetTestFunctional(新sfBrowser());美元的浏览器- >loadData();美元的浏览器- >信息(“1 -验证”)- >得到(' /附属')- >点击(“Signin”,数组(“signin”= >数组(“用户名”= >“管理”,“密码”= >“管理”),数组(“_with_csrf”= >真正的)))- >与(“响应”)- >isRedirected()- >followRedirect()- >信息(“2 -当验证一个下属,必须发送电子邮件与令牌的)- >点击(“激活”,数组(),数组(“位置”= >1))- >与(“梅勒”)- >开始()- >checkHeader(“主题”,“/ Jobeet附属令牌”)- >checkBody(/你的令牌是symfony的ob娱乐下载)- >结束();
每一个发送邮件的帮助下才能被检验checkHeader ()
和checkBody ()
方法。第二个参数的checkHeader ()
的第一个参数checkBody ()
可以是下列之一:
- 一个字符串来检查一个精确匹配;
- 一个正则表达式检查对它;
- 消极的正则表达式(一个正则表达式从一开始
!
)检查值不匹配。
请注意
默认情况下,检查完成第一个邮件发送。如果发送了电子邮件,你可以选择一个你想要测试的withMessage ()
方法。的withMessage ()
需要收件人作为它的第一个参数。它还需要第二个参数表明你想要测试的邮件如果有几个人被派往同一个收件人。
提示
像其他内置的测试人员,你可以看到原始的消息通过调用调试()
方法。
最终的想法
明天,我们将实现的最后失踪特性Jobeet网站,搜索引擎。
这项工作在Creative Commons许可Attribution-Share都3.0 Unported许可执照。