第一个问题是symfony1还是2,现在是两个版本共存的情况,貌似很纠结。

最后还是决定了考察的版本是1,理由很简单,symfony2强制要求5.3.2以上的PHP版本,这个就已经把大部分的服务器kill掉了。而且symfony2对于PHP5.3的namespace是强依赖的,这个东西现在会用的人其实也不多,也是个很大的问题。至于细节,可以参考symfony2官方网站的 Quick Tour » The Big Picture。插一句,symfony2官网上的文档写得太好了,很多东西教得几乎完美,可以参考这里:Book » Symfony2 and HTTP Fundamentals

版本号:symfony1.4.15

看了下symfony1.4的Getting Started,直接把我吓一跳啊,这玩意,一个web框架,安装东西你还要我来命令行?太专业了吧。要不是我一直看好symfony,这会我就要走人了啊。不过如果是初学者的话还是能学到不少东西,目录的创建,权限的控制,防XSS攻击和防CSRF攻击等。

后来仔细看了下,原来整理好的包也是有的。在下载源代码包的时候除了普通的source包以外还会有一个sandbox包。sandbox包就是不需要配置就能直接使用,文件夹格式都已经format好的包,还是这种比较容易用啊。

1. 资源加载

On large projects with many classes and a deep directory structure, keeping track of all the
class files to include and their paths can be time consuming. By providing an
spl_autoload_register() function, symfony makes include_once statements
unnecessary, and you can write directly:
$myObject = new MyClass();
Symfony will then look for a MyClass definition in all files ending with class.php in one of
the project’s lib/ directories. If the class definition is found, it will be included
automatically.
So if you store all your classes in lib/ directories, you don’t need to include classes anymore.
That’s why symfony projects usually do not contain any include_once or require_once
statements.

这段话的大致意思就是,只要你的类是放在lib目录下并以class.php为结尾的话,symfony会自动扫描并为你加载类。但是这么做的性能并不好,后面有附述,每次第一次做这个事情的时候,symfony会在cache目录下创建一个缓存文件,将所有的类写入一个数组中进行维护。那么后续的性能就会大幅提升,当然,在你的类结构发生变化之后记得要清除这个缓存。

2. MVC

symfony没有自己的Model,使用的是第三方的ORM。symfony使用的view和cakephp差不多,其实根本都不能算得上是模板啊,哎。官方对smarty肯定是没有支持的,我相信symfony的第三方插件肯定对smarty有支持,这个就是题外话了。controller和cakephp也是一样的,symfony的概念还多了一层action,在controller之后,controller只是入口,而action则是真正执行逻辑的地方。总的来说还是MVC的概念,只是封装的东西更多,整个系统更复杂。作为初学者我表示压力很大,看起来太累。

3. 手册&启发

不得不说symfony的这本初级手册里东西介绍得真好,特别是一些基础的概念,为什么symfony这么设计的,都有阐明。如果你真的都读懂了的话,应该会有不少的收获,附链接:A Gentle Introduction to symfony。启发以及知识点真不少。自动化类加载在第一次使用文件扫描,然后进行缓存文件写入提高性能,这个想法不错。关于测试方面,手册中很详细地阐述了测试的概念和要点,包括单元测试和功能测试以及全自动化的测试框架。

4. 为什么不用

好了,我承认,前面写的东西里面,除了资源加载的那块,其他的意义都不是很大。这个框架很强大,功能很齐全。为什么不用,主要有两点理由。使用上太过难上手,学习曲线比较陡是第一点。如果是一个10人的团队,要让每个人都能掌握这个框架到能使用的程度,我表示我已经抖了,囧。当然,这只是一方面,如果这个东西确实是我需要的,确实是能大幅度提高工作效率的话,那其实也不是很大的问题。问题更在于工作的领域上,现在我面对的工作都是以高并发API调用为主的Social游戏,对网站相关的功能要求得很少,花费那么多的时间去学习这个框架就显得不是很值得了。

好了,symfony的初步了解就到这里,恩,如果有必要的话,我会回来继续这个话题的。不过我觉得不太可能,囧,看了几个框架后我觉得还是在目前已经有的自编框架上调整出一个符合social游戏实际情况的框架会比较靠谱。