使用 Symfony 组件创建自己的 PHP 框架(第一部分:介绍)

使用 Symfony 组件创建自己的 PHP 框架(第一部分:介绍)

Chris Yue 5 comments
Posts

英文原文地址:https://symfony.com/doc/current/create_framework/introduction.html

Symfony 是一系列独立的,解耦的,可复用的,有粘着力的(cohesive)PHP 组件库。可用来解决 web 开发中的常见问题。
您可以用完整的,使用这些组件的 sf 框架来替代使用这些底层组件来做开发,亦或使用这些底层组件来创建你自己的框架。这篇文章要达成的是第二种目的。

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

为什么要创建自己的框架呢?如果你跟周围的人讨论,每个人都会告诉你重复发明轮子是一件糟糕的事情,你最好选择一个已有的框架,忘掉“创建自己的框架”这种想法。大部分情况,他们是正确的,但是我想到了几个创建自己的框架的好处:

  1. 了解更多框架的底层架构,特别是像 sf 那种完整框架的内部架构
  2. 创建一个能满足你特殊需求的框架(但首先要确定你的需求真的是很特别)
  3. 因为乐趣而试着写一个框架(为了“学习然后抛弃”的目的)(译者注:躺枪)
  4. 想利用新的开发技术以及最佳实践重构已经存在的项目
  5. 向世界证明自己也是可以写出框架的(……但只需那么一点点付出)

我将一步步的,循序渐进的引导你创建一个框架。每一步你得到的都是一个完全能使用的框架。我们将从一个简单的框架开始,然后一点点的给它加功能。最后,你将能得到一个完整的 web 框架。

当然,每一步你都会学到一些新的 sf 组件的用法。

如果你没有时间看完全文,或者你想快一点开始学习,你也可以看看 Silex 库——一个使用 sf 组件写的微框架,它的代码简单,而且也体现出 sf 组件的许多用法。

许多现代框架都称呼自己为“MVC 框架”。在这里我们不讨论 MVC,因为 sf 组件可以用来创建任何类型的框架,而不仅仅是 MVC 框架。总之,如果你看过 MVC 的定义,这个系列只讨论如何创建控制器部分。对于数据模型部分以及视图部分,这得看你的个人爱好(译者注:意思是看你喜欢使用什么库或者什么方式来处理 Model 和 View),对我而言,我会让你使用一些第三方的库文件(数据部分比如 Doctrine,Propel 或者直接使用 PDO;视图部分比如 Twig)。

当创建一个框架的时候,只是为遵循 MVC 模式并不是一个正确的目的。最主要的目的是要做到“分离关注点”(译者注:其实就是我经常说的框架的目的是为了分工,MVC 就是一种分工的方式)。事实上这是我认为需要真正关心的,唯一的设计模式。sf 组件都是围绕实现 http 协议这个基本原则而创建的。同样,我们将要创建的框架应更准确的被描述为 HTTP 框架或者说是“请求/响应框架”。

开始之前的准备

只学习如何创建框架是不够的,你最好按照我们写的例子自己实际操作一下。所以你需要一个较新版本的 PHP(译者注:因为 sf 组件部分功能是建立在 PHP 5.5.9+ 新功能之上的,所以版本最好高一些不容易出问题),一个 web 服务器比如 Apache 或者 NGINX,或者 PHP 内置的服务器,对 PHP 有较好的掌握,并且对面向对象有所了解。

准备好了吗?那我们就开始吧!

引导程序(Bootstrapping)

在构思我们的框架之前,我们需要谈谈一些规定,比如我们在什么地方保存我们的代码,如何给类命名,如何引用对外部代码的依赖等等。

我们先建立一个目录来保存我们的代码:

代码规范

我们不讨论哪种代码规范更好,只要坚守同一种代码规范就行了,这个系列我们就使用 Symfony 的编码规范

安装组件

我们将使用 Composer 来安装我们需要的 sf 组件,它是一个用 PHP 做的项目依赖管理器(译者注:类似 Gentoo 的 emerge, Ubuntu 的 apt-get)。

我们需要下载 composer 二进制文件并且运行它(译者注:其实是一个 PHP 打包后的 phar 文件,直接用 PHP 来运行。关于 phar 文件可见我之前写的文章):

或者

译者注:如果是 windows,可先直接下载好再放进刚刚建立的目录里;如果用 cygwin 可以先安装 links 再使用 links http://getcomposer.org/composer.phar 下载

虽然我们强烈建议你使用 Composer 来安装组件,但是你也可以直接使用 Git 来下载组件压缩包。这都您说了算。

译者注:如果你觉得 Composer 的速度太慢或者不稳定,可以尝试使用镜像或者代理,点此查看

译者注:通过上述方法直接下载下来的 Composer 文件名是 composer.phar,习惯上会将其改名为 composer 并且放在 PATH 下使用。实际上安装 Composer 是一个单独的话题,跟 Symfony 没太多关系,大家可以看看我另外一篇文章《优雅使用 Composer 来安装各种 PHP 小工具》,里面包含安装 Composer 本身

我们的项目

与其按自己想象瞎写一个框架,我们不如不断的改进我们的“应用程序”,每次改进都引入一个“概念”。让我们从最简单的一个程序开始:

这就是我们第一个系列的所有代码。下一章我们将介绍 HttpFoundation 组件,看它能给我们的开发带来什么改进。

接着阅读第二部分

使用 Symfony 组件创建自己的 PHP 框架(第一部分:介绍) by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

5 Comments

匿名

四月 20, 2016 在 2:17 下午

神作

petter

七月 6, 2012 在 9:51 下午

这里应该是2.0.*麻烦作者改一下,同时跟作者说声谢谢,因为有你们我们这些苦逼的(英文很烂)少花了很多时间。

    Chris Yue

    七月 7, 2012 在 10:46 上午

    原文就是2.1.*

     

    petter

    七月 9, 2012 在 9:30 下午

    哥,我错了,可composer 只能是下2.015的。。到第四章才注意到在2.1中路由组件中,新加了方法,在之前版本中都没有,这让我苦恼了很久,不得不手动在2.1的版本。。。。。哎。。。。

     

    Chris Yue

    七月 11, 2012 在 7:30 下午

    这问题我倒没遇到过,其实symfony的组件差不多也都要下,直接在require里面写"symfony/symfony": "*"把所有的组件全部下载下来更方便

    另外第四章用的是composer的autoload了,跟symfony自己的自动加载类也没啥关系了

     

发表评论

thirty ÷ = 3