支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
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 创作共用授权。