Vanilla Forum中的PHP框架


update: 最近看到有人搜索"php garden 框架 vanilla" 找到这篇文章, 我才知道框架的名字叫做Garden, 而Vanilla只是这个框架的一个应用, 特此补充.

最近有大把的空闲时间,得以专心下来看一个开源项目:Vanilla Forum. 我是边看边改,从而将其定制以满足特定的需求.现在算是告一段落,写点笔记.

Vanilla Forum是我在搜索PHP开源项目的时候偶然找到的,当时想找一份好一点的PHP源码来看,其实当时下了好多这样的源码,因为网上到处都是。有的写得太烂,看得头疼,有的太复杂,看不明白,甚至还有打着开源的幌子,下下来,关键部分的代码全都加了密.

最后看中这个Vanilla Forum, 无论是代码的质量还是设计风格都是一流的水准.从里面可以学到很多东西.

先来介绍一下这个项目, Vanilla是一个WEB 2.0风格的论坛, 不是传统的论坛而是向社交网络的风格靠近, 和facebook很像.符合GPL许可证, 有专业的团队在维护和开发项目, 据说已经有40万的安装用户.

我觉得这里面最有用的部分是其MVC框架.实际上这个系统虽然是用于SNS的, 但是完全可以将其框架独立的抽取出来去完成其他的任务.前端控制器, 控制层, 模型层, DAO层, 视图模板都在这里面有体现. 当然了,整个项目都是面向对象的. 之前我一直无法想象用PHP来做OOP是什么样子, 因为我是一直将PHP当成过程式语言来用的.

第二个特点是工厂模式的应用,系统的主要类都是通过工厂产生实例, 关于模式的书很多, 但是要说实际的案例, 这里面的实现是一个很好的例子.

另外让我印象很深的是命名机制的广泛使用.类是命名的, 工厂模式里引用类既不用类名也不必关心包含类的PHP文件的具体位置,而是用一个名字来代替, DAO类, Service类也是用名字引用的, 模仿Struts框架里面的依赖注入. 视图是按名字调用的. 这么做的好处是大大提高了代码的可读性, 隔离了底层的具体信息, 通过和良好的目录结构和文件名命名规范结合起来, 很多事情都变得非常简单.

例如要在一个控制器里面使用UserModel, 只需要在其Uses数组里面加一个名字'UserModel', 然后就可以在类中以$this->UserModel的方式使用其提供的方法.所有的Model类放在modles文件夹下面, 文件名的格式是class.usermodel.php, 类名是UserModel. 一目了然, 我以为这比Struts的xml配置文件的方式还要好些, 总是要在xml文件里面翻一翻才能知道那个类在哪里.

定制

不动手是不行的, 在原有代码的基础上, 我做了一些修改和定制.

首先, 取消了游客的概念, 只有注册用户才能使用, 未登录用户访问任何地址都会重定向到登陆页.主要的修改是对Activity功能的修改. 原来的系统是论坛式的, 任何人发布的任何内容都可以被其他所有人看到, 现在任何时候发布内容都会有一个可接受用户列表, 即只有列表中的用户才能看到内容. 每个用户都增加了一个好友列表字段, 在此基础上可以创建组, 在一个组中发布内容的时候, 可接受用户就是组中所有用户.

这样可以避免大量无用信息充斥. 相应的在用户后台添加一个管理好友列表的功能.

然后是请求加为好友功能, 如果一个用户不在自己的好友列表中, 可以发送邀请.

最后一点, 怎么注册新用户, 我的做法是已成为会员的用户可以进行授权, 在用户后台可以授权一个邮箱地址, 只有被授权的邮箱地址才可以进行注册. 所以需要靠邀请才能进行注册.

先写这么多.