第一天--开始一个工程
挑战 我 们将要开始的Symfony日历是一个24个教程的集合,是在12月1日到圣诞节之间一天一天发布的。确实如此,每一天,包括周末,而一个新的教程也会马 上发布。每一个教程都是在一小时以内,从中我们可以看到正在发展中的web 2.0程序的开发。到圣诞节时,最终的程序将会放在网上,而源码也会开源。这个程序将会是可用的,有用的,有趣的。 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 如果我们希望了解更多的源码版本控制的内容,我们可以查阅project creation chapter一节。 明天见 好了,现在已经到1小时了。我们谈论了许多,但是却并没有为Symfony作任何事情。我们看一下明天的Symfony日程会涉及到哪些内容: 程序可以做什么 构建数据模型并且生成对象关系映射 搭建一个模型 |
原文地址 http://www.symfony-project.com