介绍

3.4 版本
维护中的版本

Symfony是一套可复用的“独立、松藕合、内聚”的PHP组件,用于解决web开发问题。

除了直接使用这些底层化(low-level)的组件,你还可以使用基于这些组件的“拿来就用”的Symfony完整版框架……或者,你也可以创建你自己的框架。本文针对后者进行讲解。

为什么你要创建自己的框架? 

一上来就要创建自己的框架?看看周围的人,他们会告诉你“重复发明轮子”是多么糟糕,还会说“从现有框架中选择并且忘掉你自己的框架”。多数时候,他们是正确的,但还是有一些理由让你开始去创建自己的框架:

  • 整体上加深对现代web框架的底层架构的理解,特别是对于Symfony完整版框架内核的理解;

  • 创建一个量身定制的框架以适合你极为特殊的需求(先要明确:你的需求极其特殊);

  • 实验性地创建框架是充满乐趣的(以“即学即扔”的方式达到目标);

  • 重构老旧的/既有的程序,令其符合现代web开发之最佳实践;

  • 证明给世界你也能开发一个属于自己的框架(...这需要一点点努力)。

本教程将“一步一脚印”地引领你去创建一个web框架。每一步,你都将获得一个“即拿即用”的框架,亦可作为你自己专属框架的起点。新框架从简单做起,每一步都将增加更多功能,最终你可以得到一个全功能、全栈的web框架。

当然了,每一步,都是我们深度学习Symfony组件的大好时机。

若你没有时间阅读整篇教程,或者想要更快上道,你可以选择看看Silex,这是个基于Symfony组件的微框架。其代码十分轻量化,充分利用了不同组件提供的各种功能。

很多现代web框架宣传自己是MVC架构。本篇教程不讨论MVC模式,因为Symfony Component可以创建任意类型的框架,不只是那些遵循了MVC架构的框架。实际上,若你看一下MVC的字面含义,本书讲的是如何去创建C也就是控制器部分。对于Model和View层,完全依个人喜好而定,你可以使用任何三方类库(Doctrine、Propel或原生PDO的Model层,以及PHP或Twig的View层)。

当创建框架时,遵循MVC并非正确的目标。主要的目标应该是关联分离(Separation of Concerns)。这可能是你唯一需要重点对待的设计模式问题。Symfony框架的基本原则全部集中在HTTP协议上。因此,你即将创建的框架,将是被精确打上了HTTP标签的框架,或者说是Request/Response框架。

准备工作 

光想着创建新框架并且努力阅读是不够的。你必须真实抄写教程中全部例程的代码。因此,你需要一个PHP环境(5.59起,更高足矣),一个web服务器(如Apache、Nginx或PHP内建的web server),另外就是要有良好的PHP知识,以及OOP编程经验。

准备好了吗?开始吧!

启动 

还在想着创建新框架的话,不妨先想想一些命名约定:你在哪里存储代码,如何命名类,如何引用外部依赖,等等这些。

为了容纳你的新框架,在你电脑上的某处,新建一个目录:

1
2
$  mkdir framework
$  cd framework

依赖管理 

为了安装构建你的框架所需的Symfony组件,你将使用Composer,这是个PHP的依赖管理器。如果你还没安装它,现在就下载和安装Composer

我们的项目  

我们的框架不是从零建起,我们将会一直反复地编写同一个“程序”代码,每次添加一个抽象层。我们先从人们能够想到的最简单的PHP网络程序开始 :

1
2
3
4
// framework/index.php
$input = $_GET['name'];
 
printf('Hello %s', $input);

你可以通过PHP内建的服务器来测试这个伟大的程序(http://localhost:4321/index.php?name=Fabien):

1
$  php -S 127.0.0.1:4321

否则,你就要利用自己的服务器了(Apache、Nginx等等)。

下一章,我们将引入HttpFoundation组件,看看它能带给我们什么。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)