Symfony 的官方教程其实已经非常的详尽,但却不太亲近新手。新手想要完全理解 Symfony 文档的内容,需要对互联网开发有一定工作经验才行,否则总是有一种看不太明白,看完了也不不知道从哪儿开始的感觉。如果你有这种感觉,希望这篇文章能让你快速上手,本篇的目的,就是为了让 Symfony 新手,甚至是 PHP 新手能快速开始一个具体的项目。
本篇系列重点是为了带领新手使用 Symfony 框架,如果您想了解的是 Symfony 组件,可阅读我翻译 Symfony 项目组老大的系列教程《使用 Symfony 组件创建自己的 PHP 框架》
本篇系列源代码位于 https://coding.net/u/chrisyue/p/symfony2-framework-tutorial/git,不过因为源代码已经包含各种添加修改重构之后的代码,看不到中间过程,建议在所有章节完成之后看,或者作为日后的参考。
2017-01-05 补充:目前 Symfony 已经发展到 3.2 版本。Symfony 严格遵循了标准的版本命名规则『API 如无法向下兼容时,大版本号 +1』,事实上 2 和 3 的区别不是很大,所以其实本教程应该也是适用于 Symfony3 的。如有不兼容处,请留言,我会更新相关的教程。
2020-04-12 补充:已经发布对应的 Symfony 5 精简版教程,建议对比观看。
准备工作
下载并安装 PHP。Symfony 要求运行在 PHP 5.3 版本以上。不过随着 PHP 的版本提升,功能也越来越丰富,运行速度也有提升,所以我建议是最新的稳定版本。在 PHP 5.5 里自带了 web server,这意味着你甚至不需要 Nginx 或者 Apache 等服务就可以快速开始启动你的项目,所以没错,本教程就以 PHP 5.6(咦?难道不是 5.5 吗)为例子来讲解。
注:PHP 7 时代,使用最新版本 PHP,执行时间更短,内存占用更少,效果杠杠的!
首先保证 PHP 在 PATH 目录里。
由于本篇主要阐述如何使用 Symfony 快速开发项目。所以不阐述 PHP 的安装相关知识,这些知识点在网上都很容易查询到。
初始化项目
本篇教程我尽量按照 Windows/*nix 都可以运行的方式来讲解。
得益于 Symfony installer,我们目前可以很方便的初始化一个 Symfony 项目。不过首先,你得有一个 Symfony installer。
随便创建一个目录:比如 www,然后在此目录下先安装 Symfony installer(注意 $
为命令提示符,只是为了好看,实际操作的时候是不需要输入 $ 的,不再赘述):
php -r "readfile('http://symfony.com/installer');" > symfony.phar
然后运行以下命令确认文件可执行
php symfony.phar
如果文件无损坏,应该会显示 symfony installer 的版本号,以及如何使用 symfony installer 的简单介绍:
Symfony Installer (0.5.0) ========================= This is the official installer to start new projects based on the Symfony full-stack framework. To create a new project called blog in the current directory using the latest stable version of Symfony, execute the following command: $ symfony.phar new blog To base your project on a specific Symfony version, append the version number at the end of the command: $ symfony.phar new blog 2.5.6 Updating the Symfony Installer ------------------------------ New versions of the Symfony Installer are released regularly. To update your installer version, execute the following command: $ symfony.phar self-update
接下来,我们用 symfony.phar 来创建一个项目。这里我们打算做一个新闻聚合类网站,项目就叫 news 好了:
php symfony.phar new news
如果网络没有问题的话,应该会出现进度条(Windows 下可能没有……),此时 Symfony installer 在当前目录创建了 news 目录,并且初始化好 Symfony 框架的工作目录,以及下载所需要的第三方 PHP 库。
Downloading Symfony... 85.81 KB/4.89 MB ▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1%
当下载完成后,进入 news 目录,我们可以看到 Symfony installer 为我们初始化的工作目录。这里我们可以把一些对开发来说没有必要的文件删除掉(UPGRADE-***,LICENSE,README.md)。
不出意外,我们便可以通过下面的命令开启一个 Web server 监听在 localhost:8000 上(注:此命令只能运行在 PHP 5.5 版本之上,并且 Windows 可能只能运行 server:run
,两者的区别你们自己试试就知道),这样在开发阶段就可以不用安装和配置 Apache 或者 NGINX 也可以访问本地开发环境了,非常方便:
php app/console server:start localhost:8000
*** 注:在 3.0 以上的版本,console 已经位于 bin
目录下面,后面所有 php app/console xxx
命令,在新版本里都是 php bin/console xxx
,以下不再赘述!
另外在 *nix 环境下,app/console
或者 bin/console
只要有可执行权限,都是可以不需要显式调用 php
而直接运行的:
app/console server:start
在浏览器里访问 http://localhost:8000
,应该就可以看到 Symfony Framework 安装好之后的欢迎页面了。
需要注意的是,在生产环境还是建议用 NGINX/Apache + php-mod/fastcgi 的方式,区别在于生产环境需要多任务处理。
注意:如果访问不到首页,或者首页不是截图的样子,很有可能你安装的是 Symfony 2.7+ 版本,但并不影响后面的学习
至此,Symfony 项目初始化工作已经完成
我们可以使用 Symfony 框架自带的脚本工具,来确认当前的环境是否已经足够顺利运行 Symfony:
php app/check.php
# 在 Symfony 3.0+ 下
php bin/symfony_requirements
比如我这里显示的结果,命令运行结果推荐我安装 intl 扩展

另外我们也可以看到提示说因为命令行加载的 php.ini
可能和 web 服务器加载的不一样(常见的 php-fpm
一般都跟命令行下的 php
加载的不是同一个 php.ini
文件),建议在浏览器里查看路径 /config.php
复查一下。
Symfony 框架实战教程——第一天:创建项目 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人
11 Comments
guijianshi
12月 14, 2016 在 11:33 上午感谢你的教程,今天总算安上了,目前新的版本命令有些变化,希望可以即使更新一下
张庭
9月 1, 2016 在 11:15 下午请问教程用的symfony版本是多少
Chris Yue
9月 2, 2016 在 10:18 上午应该是 2.7 的,但2.8+ 应该也没有问题
张宏
8月 15, 2016 在 2:42 下午在创建新项目的时候显示 cURL error 60: SSL certificate problem: unable to get local issuer certificate 应该怎么办
Chris Yue
8月 17, 2016 在 10:43 上午这个问题我倒是没遇到过,不过从错误信息看得出来是应为访问了 https 网站导致的 SSL 证书错误,我只能帮你到这……当然你也可以上网查查 installer 能不能不使用安全链接而就是普通链接下载安装 Symfony
Muscleape
3月 8, 2016 在 11:23 上午你好,按照这个步骤,我安装的是SF2.7.2 在浏览器中查看的时候,报错信息如下:
No route found for “GET /”
404 Not Found – NotFoundHttpException
1 linked Exception:
Chris Yue
3月 13, 2016 在 10:01 下午使用命令
app/console debug:router
确认host和path对不对janeeyrecola
11月 17, 2015 在 4:08 下午config.php页面有个MAJOR PROBLEMS
设置date.timezone 把php.ini里都改了 重启nginx还是有这个MAJOR PROBLEMS
怎么办。,
Chris Yue
11月 22, 2015 在 10:09 下午做两个确认吧:
Asia/Shanghai
lees
9月 22, 2015 在 5:29 下午请问您第一张图片的命令是在哪输入的,我是在cmd窗口输入的,总是不行
Chris Yue
9月 24, 2015 在 8:27 下午就是在命令行输入的,Windows的命令行也可以。 你是没找对路径? 所有的命令都是在项目根目录下运行的