学习Symfony之一:初识Symfony

最早知道Symfony这个PHP框架是在几年前,当时被它的名字所吸引,“Symfony”和“Symphony”谐音,是“交响曲”的意思,自然让人想到创始人应该是位古典音乐爱好者,因而顿时对它增添了好几分的亲切感。当时因为没有太多的应用机会,也没有过多地深入学习,但这份好感却一直保留在心里。

再次看到Symfony这个名字,却非常意外地是在一篇介绍即将发布的Drupal 8的文章里——Drupal从版本8开始使用Symfony作为底层框架构建,也就是说,Drupal 8将会是一个Symfony的应用!Symfony也在它网站首页的明显位置打出了“全球最流行的内容管理平台之一的drupal采用Symfony搭建”等字样。这真是一个让人又惊又喜的消息。同时,这也让我不得不开始重新认识一下Symfony了。

标准的MVC结构

Symfony是一个标准的纯MVC结构的系统,这点和drupal完美契合。我们知道,MVC是指Model-View-Controller(模式-视图-控制器),虽然MVC已经不是一个新的概念,但它所提供的理论确实催生了众多优秀的系统,并且给Web开发带来过系统性的变革。纯的MVC系统,如Symfony和drupal,只有一个唯一的前端控制器。Symfony的前端控制器没有遵循惯例叫做index.php,而是叫做app.php,这是因为Symfony还提供一个app_dev.php的控制器,通过调用不同的配置参数,可以方便地实现开发环境和生产环境的切换。

上图摘自Symfony的官方教程,演示了Symfony的控制器是如何工作的。可以看出,任何请求的路径(图中的/, /contact, /blog等)都被提交到前端控制器(Front Controller),前端控制器会通知Symfony内核对路径进行分析,再调用路由系统(Routing)来定位到相应的控制器,控制器执行相应的代码,最后把响应结果发送到客户端。

精简的内核

Symfony的内核相当精简,因为绝大部分的功能都是由第三方代码库提供,Symfony把这些叫做Vendors。令人吃惊的是,提供很多核心功能的Symfony自己也是作为一个Vendor而存在的。通过配置autoload,你可以实现自动加载应用所需的代码库。

要开发Symfony上的应用,就是在Symfony内核的基础上去扩展功能。Symfony把扩展的功能叫做Bundles。每个Bundle会定义一些路径以及每个路径对应的代码。

除了Bundle所需的一些资源文件,如图片、CSS和Javascript等,其他的所有PHP代码,包括Vendors和Bundles中定义的所有代码,都可以放在Web目录以外的私有目录下,因此Symfony的代码是绝对安全的。

使用Composer

手工管理代码是一件枯燥又容易出错的工作,Symfony推荐使用Composer来进行代码依赖管理。

Composer是一个PHAR,即可执行的PHP代码包(Php ARchive)。Java程序员都熟悉JAR,PHAR则相当于PHP世界里的JAR。

比方说你的一个应用用到了多个第三方类库,而分别去下载这每一个类库既繁琐又容易搞错版本或放错位置。有了Composer,你可以把应用中用到的所有代码库写到一个json格式的配置文件里,然后运行:

php composer.phar install

Composer就可以把所需代码库的正确版本下载到当前位置下的vendors目录下,轻松又可靠。

Composer还可以做很多事情,比如升级第三方代码库、创建bundle等等,甚至包括Symfony的初始安装都可以用Composer来完成,我打算在下一篇博客中演示。

最后,Symfony是交响曲,而Composer有作曲家的意思,如此应景第一个名字很难让人相信这仅仅是巧合吧?