使用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 相关文章推荐
PHP安装攻略:常见问题解答(三)
Oct 09 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
php的无刷新操作实现方法分析
Feb 28 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实现的MySQL通用查询程序
2007/03/11 PHP
由php if 想到的些问题
2008/03/22 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
Vue.js中的computed工作原理
2018/03/22 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
js实现打字小游戏
2019/12/17 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
python实现串口通信的示例代码
2020/02/10 Python
python time.strptime格式化实例详解
2021/02/03 Python
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
共产党员承诺书
2014/03/25 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
社会学专业求职信
2014/07/17 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
python如何为list实现find方法
2022/05/30 Python