[+]文章目录

这一章的目的是教你如何在symfony上运行一个web应用程序。很幸运,symfony提供“发行版”,包含供开发者借鉴的示例代码。 如果你想了解如何创建新的Symfony2项目,并对代码进行版本管理,请阅读: 代码版本管理

安装symfony2发行版

首先,检查你是否已经安装和配置了PHP Web服务器(例如Apache)。关于更多的symfony2配置要求,你可以查看 requirements reference

Symfony2 有不同的“发行版”供你选择,但它们都包含了:基于Symfony2框架的应用程序,一些有用的第三方代码包,推荐的文件目录结构以及默认的配置。下载一 个Symfony2的发行版,相当于得到了一个可以立即运行的代码骨架,有了这个基础,你可以快速开发你自己的应用。 你可以访问Symfony2的下载页面来获得Symfony2的发行版: http://symfony.com/download 。总共有两种方式下载symfony: 第一种 composer composer 是一个php的依赖管理库,你能够使用它来下载symfony2发行版。 首先 下载composer 到计算机的任意位置,如果安装了curl,也很一样的简单:

 
1
$ curl -s https://getcomposer.org/installer | php

如果你的电脑没有准备好composer,当你运行以上命令的时候会有一些提示,你遵循这些提示去工作就可以正常运行composer了。

composer是一个可执行的phar文件,你能够使用它去下载发行版:

1
$ php composer.phar create-project symfony/framework-standard-edition /path/to/webroot/Symfony '~2.6'

更快的下载vendor所有文件,我们需要再composer命令行中尾部加入 –prefer-dist 配置

这个命令可能需要几分钟才能从composer中下载所需要的symfony发行版。当他完成下载后,你应该看到一个目录,他应该是这个样子:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
path/to/webroot/ <- your web server directory (sometimes named htdocs or public)
    Symfony/ <- the new directory
        app/
            cache/
            config/
            logs/
        src/
            ...
        vendor/
            ...
        web/
            app.php
            ...
 

第二种 直接下载 在官网直接下载,你有两种选择:

  • 下载 .tgz 或者 .zip 后缀的文件;
  • 下载没有vendors的版本。如果你日后使用composer管理即可在使用时下载更多的第三方库和很多的bundles,你应该下载没有vendors“without vendors”。

把下载下来的压缩包,解压到你本地的站点根目录,并打开它。 如果使用UNIX命令行,你可以输入以下命令(注意将 ### 替换为实际的文件名):

1
2
3
4
5
# for .tgz file
$ tar zxvf Symfony_Standard_Vendors_2.6.###.tgz
 
# for a .zip file
$ unzip Symfony_Standard_Vendors_2.6.###.zip
 

如果你下载的是 “ without vendors”,你需要阅读下面一个章节。

你可以很容易的覆盖这个默认的目录结构。请看如何覆盖Symfony的默认目录结构

在symfony2应用程序的symfony/web 目录处理所有的公共文件和前端控制器文件的请求。 所以你的web服务或者虚拟空间应该指定到web目录为更目录,也就是以http://localhost/Symfony/web/,为你应用程序的URLs

你不去碰案例中的根目录那么所有的URLs开始都是http://localhost/Symfony/web/

升 级vendors 这时,你已经下载了一个全功能的symfony项目区开发你自己的应用程序。一个好的symfony项目需要你去依赖大量的外部和第三方库。在这里你需要 用Composer去下载vendor目录下的一些有用库。 你在下载symfony的vendor的依赖时可以升级或者不去升级这些为最新版本。但是,升级这些vendors先的库总是安全的,也可以保证你的程序 需要。

步骤一 :请求 composer (伟大的php包管理系统)

 
1
$ curl -s http://getcomposer.org/installer | php
 

一定要确保你下载的composer.phar 是和composer.json在一个目录下(他默认在symfony项目的根目录下)

步骤二:安装 vendors

 
1
$ php composer.phar install
 

这个命令是去下载vendor必须的库–包括symfony自身库-也在这个目录下。

如果你没有curl安装,你可以手动到这个 http://getcomposer.org/installer 网址下载。拷贝到你的项目目录下并运行:

 
1
2
$ php installer
$ php composer.phar install
 

当 运行 php composer.phar install 和 php composer.phar update时,Composer需要执行install/update 命令去清楚缓存和安装资源。默认这些资源将被复制到你的web目录。 如果你系统支持symlinks,而你只需要创建symlinks,不用复制你的symfony资源。去创建symlinks,需要在 composer.json文件中的extra节点下加入symfony-assets-install并给他赋值为symlink:

 
1
2
3
4
5
"extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web",
    "symfony-assets-install": "symlink"
}
 

当symfony-assets-install相对应的是symlink时,这个命令将生成相对应的链接。

配置和安装

这 时,所有的最新的第三方库都在vendor/ 目录下。你还需要默认的应用程序设置在 app/ 里和一些简单的代码在 src/ 目录下。 symfony2自带了一个服务器配置检查工具去帮助你检查web服务和php的配置是否符合symfony的要求。你只要输入以下链接:

1
http://localhost/config.php
 

如果你有任何的问题,现在纠正它然后再继续。

设置权限

一个常见的问题是,Web服务器和你做开发使用的用户帐户都需要 app/cache 和 app/logs 目录的写权限。如果你使用的是UNIX系统,而你的Web服务器用户和开发帐户不是同一个,你可以运行下面的命令来确保有正确的文件权限。

1. 如果你的系统支持通过 chmod +a 来配置ACL(访问控制)

多数系统都允许你使用 chmod +a 命令,如果系统报错,你可以尝试方法2。它使用一个命令来确定您的web服务器用户并把它作为HTTPDUSER:

 
1
2
3
4
5
6
$ rm -rf app/cache/*
$ rm -rf app/logs/*
 
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d  -f1`
$ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
 

2. 不支持 chmod +a 的系统

有的系统不支持 chmod +a ,但有 setfacl 工具可以用来完成同样的任务。你可能需要在相应的分区 启用文件系统ACL ,并安装setfacl工具(Ubuntu系统即是这个情况),然后运行如下命令:

 
1
2
3
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d  -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
 

如果这不起作用,尝试添加- n选项。

3. 没有ACL

如果你没法启用ACL,你也可以通过修改umask,使cache和logs目录有用户组或全局可写的权限。即,在 app/console , web/app.php 和 web/app_dev.php 文件里增加以下语句:

 
1
2
3
4
5
umask(0002); // This will let the permissions be 0775
 
// or
 
umask(0000); // This will let the permissions be 0777
 

更推荐使用ACL,因为修改umask不是线程安全的。

4.使用相同的用户

在 开发环境中,这是一种常见的设置,unix用户和web服务用户使用同一个账号,以避免进行权限设置时出现问题。可以通过编辑你的web服务配置(例如常 见的Apache httpd.conf和apache2.conf)和 设置与他一样的用户(例如Apache更新用户和组)。

一切都设置好后,点击“go to the welcome page” 去请求“真正” 的symfony2页面:

 
1
http://localhost/app_dev.php/
 

到目前为止祝贺你成功配置symfony2并看到了欢迎页面!

你想有一个和上面一样的链接或者短连接你应该把你的web服务或者虚拟目录指定到Symfony/web目录下。虽然这不是必须要这样设计,但是我们推荐你的应用程序在所有的系统运行,配置文件都不应该让不该看的人看到。如何配置你的web服务器根目录,请参考“配置一个web服务”或者查阅你使用的web服务的官方文档:”Apache | Nginx“。

 

开始开发

现在你已经有了一个全功能的Symfony2应用程序,你可以开始开发了!你们的发行版里包含一些示例代码-你可以阅读 README.rst 文件来确认哪些代码被包含在你所使用的发行版里,并了解如何在不需要的时候移除它们。
如果你刚接触Symfony,” Creating Pages in Symfony2 “将向你介绍如何在你新建的Web应用里基于Symfony来创建页面,修改配置等等。
一定要看一看 Cookbook 章节,它包含了各种各样的symfony问题和解决方法。

如果你想删除发行版中的一些实例代码,看一看cookbook 文章”怎样移除AcmeDemoBundle

代码版本管理

如果你打算用 Git 或者 Subversion 来管理你的代码,你可以照常操作,并将Symfony2的标准发行版作为你项目的起点。

要了解如何更好地用Git来管理你的Symfony项目,请阅读: How to Create and store a Symfony2 Project in git

忽略 vendor/ 目录

如果你使用的是不包含第三方代码的发行版,或者你了解如何使用Symfony2自带的脚本通过Git来管理代码依赖,你可以在 .gitignore 文件里忽略 vendor/ 目录:

 
1
/vendor/
 

这样,你的vendor目录不会被提交到Git。其他人如果需要参与项目,他只需要检出相对少很多的文件,并通过 php bin/vendors install 命令来下载必须的第三方代码。


« 前一篇