修复symfony下swiftmail 无法发送邮件的问题

wpcraft项目中,本来是支持在部分情况下自动发送邮件的,但是今天测试一下发现好像不好使了,并且印象中好像没有修改到swiftmail的配置,甚至一度怀疑是smtp服务器把我的IP屏蔽了的缘故,但是后来试了一下phpmail却可以正常发送邮件,对比了一下,好像swiftmail默认的配置缺少点东西,于是按如下补上,修改app/config/parameters.yml

swiftmailer:
    transport: '%mailer_transport%'
    host: '%mailer_host%'
    username: '%mailer_user%'
    password: '%mailer_password%'
    port: '587'
    encryption: 'tls'
    spool: { type: memory }

添加了portencryption两个参数,结果一切正常,至于为什么突然要加这两项配置,我也挺纳闷…

symfony开发环境配置

如果是windows环境开发建议全程使用git bash代替cmd。

安装

一般来说有三种安装方式,1.symfony的安装器安装,2.composer安装,3.github安装,经过自己使用第一种安装方式是最简单速度也是最快的,输入如下命令创建一个新的symfony项目:

php -r "readfile('https://symfony.com/installer');" > symfony
symfony new my_project_name

继续阅读“symfony开发环境配置”

symony入门教程

安装

想了一想还是说一下怎么快速安装吧,请记得仔细看symfony.com的手册.如果你英文不是很好,请看我是怎么安装的:

下载symfony.phar文件,浏览器就能下载:http://symfony.com/installer

将此文件移动到你的web目录,cmd中cd到web目录,输入如下命令:

php symfony.phar

如果没有出现错误就可以创建你的第一个应用了,这样就创建了一个名字为symfony的应用。

php symfony.phar new symfony

建议同时也把symfony demo也装好

php symfony.phar demo

如果你一切都弄好了,hosts改好了,http.vhosts.conf也改好了[这个如果你不会的话建议百度关键词:windows xampp wamp apache 虚拟域名配置],那么你可以用你的域名访问默认页面,我的域名是 symfony.dev

我安装的symfony有一个bug,默认页的css没有被加载下来,这样的话你的应用如果出现错误了,提示【debug】页面将很难看,建议还是按照下面的方法处理一下:将 symfony demo项目的/web/bundles/下面的两个目录复制到你项目的同级目录,这样默认页就可以正常显示了:

symfony入口

symfony一切的开始应该是从appkernel【/app/AppKernel.php】这个类开始的,在app.php和app_dev.php中都有实例化这个类,而这两个文件正是项目的入口文件:

app_dev.php :

$kernel = new AppKernel('dev', true);

app.php:

$kernel = new AppKernel('prod', false);

看到参数dev【开发环境】,prod【生产环境】一切就不言而喻了吧。

appkernel干嘛用的呢?注册bundle用的,我们都知道,symfony一切皆bundle,连自己的核心代码都写在bundle里面,用户的应用也是放在bundle里面的,看AppKernel类,它继承了Kernel类,而Kernel类实现了两个接口,KernelInterface, TerminableInterface。

现在你可以开始对symfony demo熟悉了一下 【demo的安装方法在你安装symfony的CLI中都有明确的说明】,熟悉一下后可以开始尝试创建自己的bundle.

创建bundel

(创建bundle的命令请参见手册,或者你目前也可以跳过这一步使用默认的Appbundle)

如果你的bundle使用的是annotation格式的路由,请在控制器的开头加上

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

如果你使用的是phpstrom,它会提示里这个命名空间没有被使用,这是正常的,因为你的路由写在注释里面

进阶教程

更好的模板赋值方法

现在要说说twig和smarty这两个模板引擎,symfony自带的是自己研发的twig,如果熟悉了smarty的小伙伴可能不习惯用symfony的$this->render(‘模板名’,array(‘变量名’ => ‘变量值’))这样的模板赋值的方法,或者我们在渲染模板的时候需要对变量做判断,进行其他处理,现在使用如下方法可以$this->assgin(‘变量名’,‘变量值’)然后再$this->render()渲染模板:

定义一个CommonController.php放在DefaultController.php同级目录,让他继承Controller.php[注意命名空间的引用,不然会报找不到类Controller之类的错误],然后DefaultController.php继承CommonController.php

在CommonController 添加属性protected $parameters;

创建赋值的方法:

public function assign($key, $value) {
    $this->parameters[$key] = $value;
}

关键的一步:重写render方法,:

public function render($view = '', array $parameters = array(), Response $response = null) {
    $view = $this->getDefaultView($view);
    $parameters = array_merge($this->parameters, $parameters);
    return parent::render($view, $parameters, $response);

我这里$views可以为空,因为有getDefaultView查找默认模板,相信你也会写一个查找默认模板的函数把。