使用symfony命令创建项目的方法


Posted in PHP onMarch 17, 2016

本文实例讲述了使用symfony命令创建项目的方法。分享给大家供大家参考,具体如下:

概况

这一章节描述一个Symfony项目的合理结构框架,并且用 symfony 命令初始项目结构。

介绍

在symfony里,一个项目是一个指定域名下的一组服务和有效操作,共享相同的项目模型。

在一个项目里面,应用中的操作是一组逻辑;每个应用都可以正常的独立运行,与相同项目中的其他应用互不干涉。

在多数情况中,一个项目会包含两个应用,一个负责前台显示,一个负责后台处理,使用相同的数据库。当然你也可以在一个项目中包含很多小站点,每个站点都是一个不同的应用。注意在不同应用之间使用的超链接必须使用绝对路径。

每一个应用都是一组模块,每一个模块都负责一个特殊的功能。一个模块通常为了类似的功能而使用一个页面或一组页面。例如模块可以是home, articles, help, shoppingCart, account,等等。

模块的功能:每个模块都有它们各自的功能,例如 shoppingCart(购物车) 模块要有 添加(add), 展示(show) 和 更新(update) 功能。功能的行为可以看作一个典型web应用中的页行为。

如果一个新的项目的级别太多,那么可以很简单的把模块中的所有功能分组,这样做文件结构可以保持简单。当应用更加复杂的时候,可以在逻辑模块中组织功能。

每个应用都可以运行在不同的环境中,例如,不同的配置或数据库。一般来说每个新的应用都会运行在三个环境(开发,测试和最终产品)中。如果需要的话每个应用都可以运行在更多的环境中,在不同的环境中仅仅需要修改配置配件。

例如,一个测试环境中需要记录警告和错误,而一个最终产品环境将只需要记录错误。在开发环境中通常不开启缓存加速,而在测试和最终产品环境中需要开启。开 发环境和测试环境可能会需要测试用的数据,储存在最终产品的远程数据库中。所有的环境都可以在一台机器上共存,而通常产品服务器上只有最终产品环境。

注意:如果你是通过沙盒(sandbox)使用symfony,你不需要设置项目或应用,沙盒(sandbox)内部已经准备了一个名为'sf_sandbox'的项目和一个名为'frontend'的应用。你也不需要设置web服务器,只需要把你的程序放置在 web/ 根目录下。

Pake

SymFony使用专门的工具Pake去管理项目、应用和模块。Pake是一个php工具,类似于Rake命令(这是一个将 make 命令转换为Ruby的工具)。它会根据一个名为 pakefile.php 的特殊配置文件自动化一些管理任务。如果你使用 pake 工具代替了 symfony 命令行,所有的操作都会变得非常简单。

要得到所有有效的管理操作命令列表,只需要简单得在你的项目目录中输入:

$ symfony -T

CLI(命令行操作)的任务调度用于一个项目的前期阶段期间。一个关于CLI任务调度的完整说明参考CLI章节 。

项目设置

一切开始之前,你必须新建一个存放项目的目录:

$ mkdir /home/steve/myproject

然后,开始初始化项目生成原始文件和目录,简单的输入:

$ cd /home/steve/myproject
$ symfony init-project myproject

这是一个新创建的文件系统树结构的概况:

apps/
batch/
cache/
config/
data/
doc/
lib/
log/
test/
web/

symfony 命令可以在当前项目的可用目录中随时调用。

应用设置

项目到现在还没有完成,它至少还需要一个应用。先使用 symfony init-app 命令初始化一个应用,用命令后跟的参数去命名这个应用的名称:

$ symfony init-app myapp

这样就在项目的根目录下的 apps/ 文件夹中创建了一个 myapp 目录,其中包含了用于你站点的一个默认应用配置和一组目录文件:

apps/
  myapp/
    config/
    i18n/
    lib/
    modules/
    templates/

一些充当各自默认环境中的前端控制器的php文件也被创建在项目根目录的web目录下:

web/
  index.php
  myapp_dev.php

index.php是production新应用程序的前端控制器。因为你创建这个项目中的第一个应用程序时,Symfony创建了一个调用 index.php的文件,例如 myapp.php (如果你现在添加一个名为 mynewapp 的新应用程序,新产品的前端控制器将被命名为mynewapp.php)。在 开发环境中运行程序时,调用前端控制器 myapp_dev.php。

注意:你如果仔细阅读了介绍,你可能会对myapp_test.php文件的位置感到意外。事实上,测试 环境是用于对你的应用程序的构件进行单元测试,它不需要前端控制器。可以参考单元测试章节去了解更多详细内容。

从现在开始,/home/steve/myproject/ 目录将会作为项目的根目录。根目录的路径已经被保存为 SF_ROOT_DIR 常量,定义在 index.php 文件中,并且我们将会用这个常量名代替实际路径以避免把不叫Steve的读者搞糊涂了(译者注:因为作者将项目放在/home/steve /myprojetc的目录下,这个路径每个人可能都不尽相同,所以使用常量SF_ROOT_DIR来代替了实际路径)。

Web服务器设置

为了访问和测试新的应用程序,需要配置web服务器。这有一个Apache的例子,在 httpd.conf 配置文件中加入一个新的虚拟主机:

<Directory "/$data_dir/symfony/web/sf">
 AllowOverride All
 Allow from All
</Directory>
<VirtualHost *:80>
 ServerName myapp.example.com
 DocumentRoot "/home/steve/myproject/web"
 DirectoryIndex index.php
 Alias /sf /$data_dir/symfony/web/sf
 <Directory "/home/steve/myproject/web">
  AllowOverride All
  Allow from All
 </Directory>
</VirtualHost>

注意:上面的配置中的 $data_dir 变量需要替换成你的PEAR库目录。例如:在*nix系统中,你可以输入:

<code> Alias /sf /usr/local/lib/php/data/symfony/web/sf</code>

你可以在安装章节找到更多关于PEAR目录的信息。

重启Apache服务之后,就可以看到调用新创建的应用程序的页面,只需要在一个标准的web浏览器的地址栏输入下列路径:

http://myapp.example.com/index.php/

或者,在调试模式下使用这个路径:

http://myapp.example.com/myapp_dev.php/

注意:Symfony显示‘简短漂亮的(smart)'路径时用到了 mod_rewrite 模块。如果你的Apache版本没有将 mod_rewrite 模块编译进去,那么需要在 httpd.conf 中检查模块mod_rewrite是否是动态模块方式(DSO)安装的,并且确认是否已经打开(译者注:关于Apache的mod_rewrite模块安 装和使用方法请参考Apache相关文档,这里假设读者已经具备这方面知识而不作过多说明):

AddModule mod_rewrite.c
LoadModule rewrite_module modules/mod_rewrite.so

你可以在路由(routing)章节了解更多关于简短路径(smart urls)的信息。

Symfony 兼容其它服务器配置方式。你也可以,例如,用别名(alias)代替虚拟主机访问symfony应用程序。若需要了解更多关于web服务器配置信息,请查阅相关章节。

模块设置

你这个新的应用程序并不出众,它缺乏吸引人的功能。如果你想增加功能性,你需要在在其中用到模块。这里再一次用到了 symfony 命令,参数为 init-module ,后面跟着应用程序名称和新模块的名称:

$ symfony init-module myapp mymodule

创建以后的树结构如下:

modules/
  mymodule/
    actions/
    config/
    lib/
    templates/
    validate/

新模块直接可以被使用:

http://myapp.example.com/index.php/mymodule

然后你需要让它正常的工作,编辑文件 myapp/modules/mymodule/templates/indexSuccess.php 输入:

Hello, world !

保存它,刷新刚才的页面就可以看到内容!

源文件版本控制(Source versioning)

应用程序设置完成之后,建议开始进行源文件版本控制。Symfony从一开始就支持CVS(译者注:版本控制系统),建议使用Subversion(译者注:一个版本控制系统软件,采用CVS 的运作模型, 并以取代CVS 为目标)。下面的例子列出了一些Subversion的命令,用于从在一个安装了Subversion的服务器上创建一个新项目的"仓库"(译者注:repository,源代码储存的地方)。对于Windows用户,建议客户端使用TortoiseSVN。关于源文件版本控制的更多信息和命令用法,请参考Subversion文档。

下面的例子假设$SVNREP_DIR是一个已经定义的环境变量。如果你还没有定义它,你需要用"仓库"的实际路径代替$SVNREP_DIR变量。

现在让我们开始创建myproject项目的新"仓库":

$ svnadmin create $SVNREP_DIR/myproject

然后用下面这串命令创建新"仓库"的基本组织结构(规划),其中包含 trunk, tags 和 branches 三个目录:

[code]$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/myproject/trunk file:///$SVNREP_DIR/myproject/tags file:///$SVNREP_DIR/myproject/branches[/code]

这将是你第一个版本。现在你必须导入项目的文件,但不包括缓存和日志等临时文件:

$ cd /home/steve/myproject
$ rm -rf cache/*
$ rm -rf log/*
$ svn import -m "initial import" . file:///$SVNREP_DIR/myproject/trunk

检查提交的文件:

$ svn ls file:///$SVNREP_DIR/myproject/trunk/

看上去很不错。现在SVN"仓库"已经记录了所有项目文件的版本(和更改历史)。就是说实际路径为 /home/steve/myproject 的目录中所有的文件都已经被"仓库"记录。要做到这一点,首先重命名 myproject 目录名,当一切运行正常的时候可以删除它,并且在新目录中向"仓库"提交一个checkout:

$ cd /home/steve
$ mv myproject myproject.origin
$ svn co file:///$SVNREP_DIR/myproject/trunk myproject
$ ls myproject

现在你可以在 /home/steve/myproject/ 目录下的文件中工作,并且提交修改到"仓库"中。不要忘记作一些清理和删除myproject.origin目录,它现在没有用了。

还有一些另外的设置。当你向"仓库"中提交工作目录时,会复制一些多余的文件,像项目中 cache 和 log 目录下的文件。因此你需要针对这个项目在svn中指定一个忽略列表。你也需要重新将 cache/ 和 log/ 目录的权限设置为完全控制,在访问时产生的文件SVN将不会储存:

$ cd /home/steve/myproject
$ svn propedit svn:ignore .
$ chmod 777 cache
$ chmod 777 log

这将调用在SVN中设置的默认的文本编辑器。如果没有生效,就像下面这样设置subversion首选的编辑器:

$ export SVN_EDITOR=<name of editor>
$ svn propedit svn:ignore .

直接在SVN中的忽略列表中加入myproject子目录,这样提交的时候就忽略了:

cache
log

保存然后退出,这样就完成了。

希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
用PHP和ACCESS写聊天室(九)
Oct 09 PHP
php设计模式小结
Feb 15 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
php生成二维码
Aug 10 PHP
PHP模块化安装教程
Jun 01 PHP
php设计模式之单例模式代码
Jun 11 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 #PHP
Symfony模板的快捷变量用法实例
Mar 17 #PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 #PHP
Symfony2学习笔记之插件格式分析
Mar 17 #PHP
Symfony2学习笔记之系统路由详解
Mar 17 #PHP
Symfony2学习笔记之控制器用法详解
Mar 17 #PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 #PHP
You might like
PHP下escape解码函数的实现方法
2010/08/08 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JS案例分享之金额小写转大写
2014/05/15 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
浅析JavaScript动画
2015/06/10 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
离婚协议书应该怎么写
2014/10/12 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
用Python将GIF动图分解成多张静态图片
2021/06/11 Python