创建新项目

3.3 版本
维护中的版本

安装Symfony 

过去,Symfony使用Composer这个依赖管理器来安装项目。不过,现在我们推荐使用Symfony安装器,它应该在你创建项目之前被安装。

Best Practice

Best Practice

使用Symfony安装器来创建基于Symfony的项目。

参考安装和设置Symfony框架章节来了解如何安装和使用Symfony Installer。

创建博客程序 

现在每样东西都被设置好了,你可以创建基于Symfony的全新项目了。在命令行中,进入一个你有权限新建文件的目录,并执行下述命令:

1
2
3
4
5
6
$  cd projects/
$  symfony new blog
 
# Windows
c:\> cd projects/
c:\projects\> php symfony new blog

Note

如果安装器不工作,你看不到任何输出,确保电脑上的phar扩展已经安装和启用。

上面的命令,创建了一个名为blog的目录,里面是一个基于Symfony最新稳定版的全新项目。除此之外,安装器还会检查你的操作系统是否满足了运行Symfony所需之环境。如果不满足,你会看到一个列表,上面有你需要修复的信息。

Tip

Symfony发布后因为安全原因而带有数字签名。如果你希望校验你的Symfony程序,请参考public checksums repository/公共校验库并按照这些步骤来校验签名。

令程序结构化 

创建完程序之后,进入blog/目录,你会发现有一堆文件和文件夹被自动生成了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
blog/
├─ app/
│  ├─ config/
│  └─ Resources/
├─ bin
│  └─ console
├─ src/
│  └─ AppBundle/
├─ var/
│  ├─ cache/
│  ├─ logs/
│  └─ sessions/
├─ tests/
│  └─ AppBundle/
├─ vendor/
└─ web/

这种层级式的文件和目录是符合Symfony推荐的命名约定的,可以令你的程序结构化。每个目录的推荐用法如下:

  • app/config/,存放用来定义各种环境的配置文件;

  • app/Resources/,存放程序级别的全部模板和翻译文件。(译注:程序级是被Symfony内核最先查找的位置);

  • src/AppBundle/,存放Symfony特殊代码(控制器和路由),你的域对象代码(如Doctrine类),以及你的全部业务逻辑;

  • var/cache/,存放程序生成的缓存;

  • var/logs/,存放程序生成的日志;

  • var/sessions/,存放程序生成的session;

  • tests/AppBundle/,存放程序的自动测试(如单元测试);

  • vendor/,这个文件夹是Composer安装的程序依赖的位置,你不应该编辑它下面的任何内容。

  • web/,存放前端控制器和所有的web assets资源,例如css、js和图片。

程序的bundles 

Symfony 2.0推出之后,多数开发者很自然地用Symfony 1.x的方式去划分程序的逻辑模块。这就是为何很多Symfony应用都把它们的代码按逻辑功能进行拆分的原因:UserBundle、ProductBundle、InvoiceBundle等等。

但bundle的真义在于,它是作为软件的一个“可被复用”的独立构成而存在。如果UserBundle不能“原封不动地”使用在别的Symfony程序中,它不应该成为bundle。另外,如果InvoiceBundle依赖于ProductBundle,那便没有任何必要将它们分成两个bundle。

Best Practice

Best Practice

为你的程序逻辑只创建一个名为AppBundle的bundle。

去实现一个单独的AppBundle可令你的程序简明易懂。

Note

AppBundle前面没有你的vendor前缀(比如AcmeAppBundle),因为程序的这个bundle将永远不会共享分发。

Note

创建一个新bundle的另一个原因是,当你要覆写某个三方bundle的一些内容时。参阅如何利用Bundle的继承来重写Bundle局部

总而言之,下面是Symfony程序的一个典型目录结构,它遵循了上述最佳实践:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
blog/
├─ app/
│  ├─ config/
│  └─ Resources/
├─ bin/
│  └─ console
├─ src/
│  └─ AppBundle/
├─ tests/
│  └─ AppBundle/
├─ var/
│  ├─ cache/
│  ├─ logs/
   └─ sessions/
├─ vendor/
└─ web/
   ├─ app.php
   └─ app_dev.php

Tip

如果你的Symfony安装没有预建AppBundle,你可以用下面的命令手动生成:

1
$  php bin/console generate:bundle --namespace=AppBundle --dir=src --format=annotation --no-interaction

扩展目录结构 

若你的项目或内核需要对Symfony默认目录结构作出某些改变的话,你可以覆写Symfony的默认目录结构cache/logs/web/

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

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