24次小于一小时的时 间相当于不到一天的时间,而这正是我们认为一个开发者学习Symfony所需要的时间。每一天都会有新的特性加入到程序中,而我们将会充分利用这些开发来 展示Symfony的功能,以及在Symfony web开发中的一些有益的实践。每一天,我们都会认识到使用Symfony开发一个web程序是多么的快速与高效,而我们也将会了解更多的内容。
我们认为这些挑战已经足够了,而且因为我们是懒人,我们对于21天的冬天时间并没有安排。社区最需要的特性将会添加到程序当中,无需准备,而我们将会使其工作。
工程
我 们将要设计的程序是一个琐碎的"显示与通知"程序,就像一份要做事情的列表,一个电话本,或是一个书店。但是我们希望在原始的工程上使用Symfony, 而且工程有用,并且具有许多特性和一个合适的尺寸。这个目标就是要证明Symfony可以用于在复杂的条件下,使用样式与少量的工作来开发专业的程序。
我 们也希望有许多来实际使用这个程序,从而可以显示Symfony站点也可以支持一个重要的负载。这也就是为什么这个程序需要提供实际的服务,回答存在的需 求,或是创建一个新版本的原因。网站的运行是一个实在的压力测试,这就意味着我们需要你,以及更多的读者来使用这个站点并且在实际的生活讨论他,从而可以 检测他可以支持多少的访问者。
工程的内容对于其他天来说是保密的。今天我们还有许多工作要做,而不会描述一个完整的web 2.0程序。这些为我们提供了足够的时间来考虑新的特性。然而,我们需要一个名字,所以我们就称这个工程为askeet。
今天的内容
今天的目标就是要在一个网络浏览器中显示一个程序页面,并且要设置一个专业的开发环境。这包括安装Symfony,创建程序,配置网络服务器,以及设置源码版本控制系统。
这对于已经完成了前面教程的读者来是很容易的,而对于其他人来说也并不难。而所有的人都会学到一些新的东西。
我们认为你会使用一个安装有Apache,MySQL与PHP5的类Unix系统。如果你运行一个Windows系统,也并不痛苦:他也可以工作的很好,我们只需要在cmd提示符下输入一些命令。
安装Symfony
安装Symfony最简单的方法就是使用PEAR包。然而,为了可以使用频道--以及访问Symfony频道--我们需要更新到PEAR 1.4.0或是更高版本:
$ pear upgrade PEAR
现在我们可以添加Symfony频道:
$ pear channel-discover pear.symfony-project.com
现在我们就准备好安装Symfony的最新的稳定版本以及相应的依赖包了:
$ pear install symfony/symfony
可以通过使用命令行来检测Symfony版本以确定Symfony是否已经成功安装:
$ symfony -V
如 果我们想知道这个新的命令行工具可以为我们做哪些事情,我们可以输入symfony -T来列出所有可用的选项。我们也许希望阅读Running symfony一节来了解如何由一个tgz文档或是svn库来安装Symfony。在symfony wiki中也有一个社区贡献的非PEAR安装的版本。
设置工程
在Symfony 中,共享相同数据模型的程序(application)组织在工程(project)中。对于askeet工程,我们已经他有一个前端也一个后端:这就成 为两个程序。工程是程序的外壳,他需要首先被创建。为要完成这要的工作,我们所需要的就是一个目录以及一个symfony init-project命令行:
$ mkdir /home/sfprojects/askeet
$ cd /home/sfprojects/askeet
$ symfony init-project askeet
现在我们使用symfony init-app命令来创建前端程序:
$ symfony init-app frontend
Wow,实在是太快了。
配置网络服务
配置网络服务器
现 在我们需要改变我们的Apache配置从而可以访问新的程序。在一个专业的环境下,更好的方法是将新的程序设置为一个虚拟主机,而这也正是我们这里要描述 的。然而,如果我们更喜欢将其添加为一个alias,我们可以查看web server configuration一节来进行配置。
打开Apache/conf/目录下的httpd.conf文件,并且在末尾添加下面的内容:
<VirtualHost *:80>
ServerName askeet
DocumentRoot "/home/sfprojects/askeet/web"
DirectoryIndex index.php
Alias /sf /usr/local/lib/php/data/symfony/web/sf
<Directory "/home/sfprojects/askeet/web">
AllowOverride All
</Directory>
</VirtualHost>
/sf指向了我们的PEAR数据目录中的Symfony目录。要确定这个目录,我们可以输入pear config-show命令。Symfony程序需要访问这些目录来得到一些图片以及JavaScrit文件,从而可以正确的运行web调试工具栏以及AJAX帮助者。
在Windows中,我们可以用下面的命令来替换Alias:
Alias /sf "C:/php/pear/data/symfony/web/sf"
声明域名
askeet域名需要声明为本地域名。
如果我们运行一个Linux系统,那么已经在/etc/hosts/文件中完成了这样的工作。如果我们运行Windows XP,那么这个文件位于C:/WINDOWS/system32/drivers/etc/目录下。
添加下需的行:
127.0.0.1 askeet
如果我们不希望设置一个新的主机,我们需要在我们的网站服务器上添加一个在另一个端口上的Listen语句。这就允许我们使用本地域名。
测试新配置
重启Apache服务器,来检测我们可以访问我们的新程序:
http://askeet
恭喜
Symfony 可以使用mod_rewrite模块来移除URL中的/index.php/部分。如果我们不想使用他或者是我们的服务器并没有提供相应的功能,我们可以 移除位于web/目录下的.htaccess文件。如果我们的Apache版本并没有使用mod_rewrite来进行编译,检查我们是否安装了 mod_rewrite DSO,并且在我们的httpd.conf文件中有下面几行:
AddModule mod_rewrite.c
LoadModule rewrite_module modules/mod_rewrite.so
我们可以在Links and the Routing System一节中了解更多内容。
我们也应试着在开发环境下访问程序。我们可以输入面的URL:
http://askeet/frontend_dev.php/
此时web调试工具栏应出现在右上角,包括确认我们的Alias sf/配置正确的小图标。
web调试工具栏
如果我们在Windows环境下运行IIS服务,那么配置会有一些小小的不同。我们可以在related tutorial中查找到配置方法。
Subversion
懒 人的一条原则就是不必担心打乱现在的代码。因为我们希望快速的工作,我们希望如果对我们的修改不满意可以恢复到以前的一个版本,我们希望多个人同时在一个 工程上工作,而我们还希望你可以访问程序的每一天的版本,我们将会使用源码版本系统。因为这个原因,我们会使用Subversion。现在假设你已经安装 了一个Subversion服务器或是可以访问一个Subversion服务器。
首先,为askeet工程创建一个新的仓库:
$ svnadmin create $SVNREP_DIR/askeet
$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/ask/trunk file:///$SVNREP_DIR/askeet/tags file:///$SVNREP_DIR/askeet/branches
接下来,我们需要做第一次导入,忽略cache/与log/临时文件:
$ cd /home/sfprojects/askeet
$ rm -rf cache/*
$ rm -rf log/*
$ svn import -m "initial import " . file:///$SVNREP_DIR/askeet/trunk
现在删除原始的程序目录,而使用一个检出的SVN版本:
$ cd /home/sfprojects
$ mv askeet askeet.origin
$ svn co file://$SVNDIR/askeet/trunk askeet/
$ ls askeet/
$ rm -rf askeet.origin
现在还有一件事情需要配置。如果我们向代码仓库提交我们的工作目录,我们也许会拷贝一些我们并不希望的文件,例如位于我们工程的cache与log目录中的内容。所以我们需要为这个工程向SVN设置一个忽略列表:
$ cd /home/sfprojects/askeet
$ svn propedit svn:ignore cache
这些就会启动为SVN所配置的默认的文本编辑器。添加cache的子目录,这样当提交时SVN就会忽略这些内容:
*
保存退出,我们就完成了设置工作。
对log/目录重复这样的过程:
$ svn propedit svn:ignore log
然后只输入:*
现在,确保将cache与log目录的写权限设置回合适的级别,这样我们的web服务器可以向其中写入。在命令行输入下面命令:
$ chmod 777 cache
$ chmod 777 log |