使用symfony命令創(chuàng)建項(xiàng)目的方法
本文實(shí)例講述了使用symfony命令創(chuàng)建項(xiàng)目的方法。分享給大家供大家參考,具體如下:
概況
這一章節(jié)描述一個(gè)Symfony項(xiàng)目的合理結(jié)構(gòu)框架,并且用 symfony 命令初始項(xiàng)目結(jié)構(gòu)。
介紹
在symfony里,一個(gè)項(xiàng)目是一個(gè)指定域名下的一組服務(wù)和有效操作,共享相同的項(xiàng)目模型。
在一個(gè)項(xiàng)目里面,應(yīng)用中的操作是一組邏輯;每個(gè)應(yīng)用都可以正常的獨(dú)立運(yùn)行,與相同項(xiàng)目中的其他應(yīng)用互不干涉。
在多數(shù)情況中,一個(gè)項(xiàng)目會(huì)包含兩個(gè)應(yīng)用,一個(gè)負(fù)責(zé)前臺(tái)顯示,一個(gè)負(fù)責(zé)后臺(tái)處理,使用相同的數(shù)據(jù)庫。當(dāng)然你也可以在一個(gè)項(xiàng)目中包含很多小站點(diǎn),每個(gè)站點(diǎn)都是一個(gè)不同的應(yīng)用。注意在不同應(yīng)用之間使用的超鏈接必須使用絕對(duì)路徑。
每一個(gè)應(yīng)用都是一組模塊,每一個(gè)模塊都負(fù)責(zé)一個(gè)特殊的功能。一個(gè)模塊通常為了類似的功能而使用一個(gè)頁面或一組頁面。例如模塊可以是home, articles, help, shoppingCart, account,等等。
模塊的功能:每個(gè)模塊都有它們各自的功能,例如 shoppingCart(購物車) 模塊要有 添加(add), 展示(show) 和 更新(update) 功能。功能的行為可以看作一個(gè)典型web應(yīng)用中的頁行為。
如果一個(gè)新的項(xiàng)目的級(jí)別太多,那么可以很簡單的把模塊中的所有功能分組,這樣做文件結(jié)構(gòu)可以保持簡單。當(dāng)應(yīng)用更加復(fù)雜的時(shí)候,可以在邏輯模塊中組織功能。
每個(gè)應(yīng)用都可以運(yùn)行在不同的環(huán)境中,例如,不同的配置或數(shù)據(jù)庫。一般來說每個(gè)新的應(yīng)用都會(huì)運(yùn)行在三個(gè)環(huán)境(開發(fā),測試和最終產(chǎn)品)中。如果需要的話每個(gè)應(yīng)用都可以運(yùn)行在更多的環(huán)境中,在不同的環(huán)境中僅僅需要修改配置配件。
例如,一個(gè)測試環(huán)境中需要記錄警告和錯(cuò)誤,而一個(gè)最終產(chǎn)品環(huán)境將只需要記錄錯(cuò)誤。在開發(fā)環(huán)境中通常不開啟緩存加速,而在測試和最終產(chǎn)品環(huán)境中需要開啟。開 發(fā)環(huán)境和測試環(huán)境可能會(huì)需要測試用的數(shù)據(jù),儲(chǔ)存在最終產(chǎn)品的遠(yuǎn)程數(shù)據(jù)庫中。所有的環(huán)境都可以在一臺(tái)機(jī)器上共存,而通常產(chǎn)品服務(wù)器上只有最終產(chǎn)品環(huán)境。
注意:如果你是通過沙盒(sandbox)使用symfony,你不需要設(shè)置項(xiàng)目或應(yīng)用,沙盒(sandbox)內(nèi)部已經(jīng)準(zhǔn)備了一個(gè)名為'sf_sandbox'的項(xiàng)目和一個(gè)名為'frontend'的應(yīng)用。你也不需要設(shè)置web服務(wù)器,只需要把你的程序放置在 web/ 根目錄下。
Pake
SymFony使用專門的工具Pake去管理項(xiàng)目、應(yīng)用和模塊。Pake是一個(gè)php工具,類似于Rake命令(這是一個(gè)將 make 命令轉(zhuǎn)換為Ruby的工具)。它會(huì)根據(jù)一個(gè)名為 pakefile.php 的特殊配置文件自動(dòng)化一些管理任務(wù)。如果你使用 pake 工具代替了 symfony 命令行,所有的操作都會(huì)變得非常簡單。
要得到所有有效的管理操作命令列表,只需要簡單得在你的項(xiàng)目目錄中輸入:
$ symfony -T
CLI(命令行操作)的任務(wù)調(diào)度用于一個(gè)項(xiàng)目的前期階段期間。一個(gè)關(guān)于CLI任務(wù)調(diào)度的完整說明參考CLI章節(jié) 。
項(xiàng)目設(shè)置
一切開始之前,你必須新建一個(gè)存放項(xiàng)目的目錄:
$ mkdir /home/steve/myproject
然后,開始初始化項(xiàng)目生成原始文件和目錄,簡單的輸入:
$ cd /home/steve/myproject $ symfony init-project myproject
這是一個(gè)新創(chuàng)建的文件系統(tǒng)樹結(jié)構(gòu)的概況:
apps/
batch/
cache/
config/
data/
doc/
lib/
log/
test/
web/
symfony 命令可以在當(dāng)前項(xiàng)目的可用目錄中隨時(shí)調(diào)用。
應(yīng)用設(shè)置
項(xiàng)目到現(xiàn)在還沒有完成,它至少還需要一個(gè)應(yīng)用。先使用 symfony init-app 命令初始化一個(gè)應(yīng)用,用命令后跟的參數(shù)去命名這個(gè)應(yīng)用的名稱:
$ symfony init-app myapp
這樣就在項(xiàng)目的根目錄下的 apps/ 文件夾中創(chuàng)建了一個(gè) myapp 目錄,其中包含了用于你站點(diǎn)的一個(gè)默認(rèn)應(yīng)用配置和一組目錄文件:
apps/
myapp/
config/
i18n/
lib/
modules/
templates/
一些充當(dāng)各自默認(rèn)環(huán)境中的前端控制器的php文件也被創(chuàng)建在項(xiàng)目根目錄的web目錄下:
web/
index.php
myapp_dev.php
index.php是production新應(yīng)用程序的前端控制器。因?yàn)槟銊?chuàng)建這個(gè)項(xiàng)目中的第一個(gè)應(yīng)用程序時(shí),Symfony創(chuàng)建了一個(gè)調(diào)用 index.php的文件,例如 myapp.php (如果你現(xiàn)在添加一個(gè)名為 mynewapp 的新應(yīng)用程序,新產(chǎn)品的前端控制器將被命名為mynewapp.php)。在 開發(fā)環(huán)境中運(yùn)行程序時(shí),調(diào)用前端控制器 myapp_dev.php。
注意:你如果仔細(xì)閱讀了介紹,你可能會(huì)對(duì)myapp_test.php文件的位置感到意外。事實(shí)上,測試 環(huán)境是用于對(duì)你的應(yīng)用程序的構(gòu)件進(jìn)行單元測試,它不需要前端控制器。可以參考單元測試章節(jié)去了解更多詳細(xì)內(nèi)容。
從現(xiàn)在開始,/home/steve/myproject/ 目錄將會(huì)作為項(xiàng)目的根目錄。根目錄的路徑已經(jīng)被保存為 SF_ROOT_DIR 常量,定義在 index.php 文件中,并且我們將會(huì)用這個(gè)常量名代替實(shí)際路徑以避免把不叫Steve的讀者搞糊涂了(譯者注:因?yàn)樽髡邔㈨?xiàng)目放在/home/steve /myprojetc的目錄下,這個(gè)路徑每個(gè)人可能都不盡相同,所以使用常量SF_ROOT_DIR來代替了實(shí)際路徑)。
Web服務(wù)器設(shè)置
為了訪問和測試新的應(yīng)用程序,需要配置web服務(wù)器。這有一個(gè)Apache的例子,在 httpd.conf 配置文件中加入一個(gè)新的虛擬主機(jī):
<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系統(tǒng)中,你可以輸入:
<code> Alias /sf /usr/local/lib/php/data/symfony/web/sf</code>
你可以在安裝章節(jié)找到更多關(guān)于PEAR目錄的信息。
重啟Apache服務(wù)之后,就可以看到調(diào)用新創(chuàng)建的應(yīng)用程序的頁面,只需要在一個(gè)標(biāo)準(zhǔn)的web瀏覽器的地址欄輸入下列路徑:
http://myapp.example.com/index.php/
或者,在調(diào)試模式下使用這個(gè)路徑:
http://myapp.example.com/myapp_dev.php/
注意:Symfony顯示‘簡短漂亮的(smart)'路徑時(shí)用到了 mod_rewrite 模塊。如果你的Apache版本沒有將 mod_rewrite 模塊編譯進(jìn)去,那么需要在 httpd.conf 中檢查模塊mod_rewrite是否是動(dòng)態(tài)模塊方式(DSO)安裝的,并且確認(rèn)是否已經(jīng)打開(譯者注:關(guān)于Apache的mod_rewrite模塊安 裝和使用方法請(qǐng)參考Apache相關(guān)文檔,這里假設(shè)讀者已經(jīng)具備這方面知識(shí)而不作過多說明):
AddModule mod_rewrite.c LoadModule rewrite_module modules/mod_rewrite.so
你可以在路由(routing)章節(jié)了解更多關(guān)于簡短路徑(smart urls)的信息。
Symfony 兼容其它服務(wù)器配置方式。你也可以,例如,用別名(alias)代替虛擬主機(jī)訪問symfony應(yīng)用程序。若需要了解更多關(guān)于web服務(wù)器配置信息,請(qǐng)查閱相關(guān)章節(jié)。
模塊設(shè)置
你這個(gè)新的應(yīng)用程序并不出眾,它缺乏吸引人的功能。如果你想增加功能性,你需要在在其中用到模塊。這里再一次用到了 symfony 命令,參數(shù)為 init-module ,后面跟著應(yīng)用程序名稱和新模塊的名稱:
$ symfony init-module myapp mymodule
創(chuàng)建以后的樹結(jié)構(gòu)如下:
modules/
mymodule/
actions/
config/
lib/
templates/
validate/
新模塊直接可以被使用:
http://myapp.example.com/index.php/mymodule
然后你需要讓它正常的工作,編輯文件 myapp/modules/mymodule/templates/indexSuccess.php 輸入:
Hello, world !
保存它,刷新剛才的頁面就可以看到內(nèi)容!
源文件版本控制(Source versioning)
應(yīng)用程序設(shè)置完成之后,建議開始進(jìn)行源文件版本控制。Symfony從一開始就支持CVS(譯者注:版本控制系統(tǒng)),建議使用Subversion(譯者注:一個(gè)版本控制系統(tǒng)軟件,采用CVS 的運(yùn)作模型, 并以取代CVS 為目標(biāo))。下面的例子列出了一些Subversion的命令,用于從在一個(gè)安裝了Subversion的服務(wù)器上創(chuàng)建一個(gè)新項(xiàng)目的"倉庫"(譯者注:repository,源代碼儲(chǔ)存的地方)。對(duì)于Windows用戶,建議客戶端使用TortoiseSVN。關(guān)于源文件版本控制的更多信息和命令用法,請(qǐng)參考Subversion文檔。
下面的例子假設(shè)$SVNREP_DIR是一個(gè)已經(jīng)定義的環(huán)境變量。如果你還沒有定義它,你需要用"倉庫"的實(shí)際路徑代替$SVNREP_DIR變量。
現(xiàn)在讓我們開始創(chuàng)建myproject項(xiàng)目的新"倉庫":
$ svnadmin create $SVNREP_DIR/myproject
然后用下面這串命令創(chuàng)建新"倉庫"的基本組織結(jié)構(gòu)(規(guī)劃),其中包含 trunk, tags 和 branches 三個(gè)目錄:
[code]$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/myproject/trunk file:///$SVNREP_DIR/myproject/tags file:///$SVNREP_DIR/myproject/branches[/code]
這將是你第一個(gè)版本。現(xiàn)在你必須導(dǎo)入項(xiàng)目的文件,但不包括緩存和日志等臨時(shí)文件:
$ 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/
看上去很不錯(cuò)?,F(xiàn)在SVN"倉庫"已經(jīng)記錄了所有項(xiàng)目文件的版本(和更改歷史)。就是說實(shí)際路徑為 /home/steve/myproject 的目錄中所有的文件都已經(jīng)被"倉庫"記錄。要做到這一點(diǎn),首先重命名 myproject 目錄名,當(dāng)一切運(yùn)行正常的時(shí)候可以刪除它,并且在新目錄中向"倉庫"提交一個(gè)checkout:
$ cd /home/steve $ mv myproject myproject.origin $ svn co file:///$SVNREP_DIR/myproject/trunk myproject $ ls myproject
現(xiàn)在你可以在 /home/steve/myproject/ 目錄下的文件中工作,并且提交修改到"倉庫"中。不要忘記作一些清理和刪除myproject.origin目錄,它現(xiàn)在沒有用了。
還有一些另外的設(shè)置。當(dāng)你向"倉庫"中提交工作目錄時(shí),會(huì)復(fù)制一些多余的文件,像項(xiàng)目中 cache 和 log 目錄下的文件。因此你需要針對(duì)這個(gè)項(xiàng)目在svn中指定一個(gè)忽略列表。你也需要重新將 cache/ 和 log/ 目錄的權(quán)限設(shè)置為完全控制,在訪問時(shí)產(chǎn)生的文件SVN將不會(huì)儲(chǔ)存:
$ cd /home/steve/myproject $ svn propedit svn:ignore . $ chmod 777 cache $ chmod 777 log
這將調(diào)用在SVN中設(shè)置的默認(rèn)的文本編輯器。如果沒有生效,就像下面這樣設(shè)置subversion首選的編輯器:
$ export SVN_EDITOR=<name of editor> $ svn propedit svn:ignore .
直接在SVN中的忽略列表中加入myproject子目錄,這樣提交的時(shí)候就忽略了:
cache log
保存然后退出,這樣就完成了。
希望本文所述對(duì)大家基于Symfony框架的PHP程序設(shè)計(jì)有所幫助。
- Symfony2框架創(chuàng)建項(xiàng)目與模板設(shè)置實(shí)例詳解
- Symfony頁面的基本創(chuàng)建實(shí)例詳解
- symfony2.4的twig中date用法分析
- Symfony2之session與cookie用法小結(jié)
- Symfony2實(shí)現(xiàn)從數(shù)據(jù)庫獲取數(shù)據(jù)的方法小結(jié)
- Symfony2實(shí)現(xiàn)在controller中獲取url的方法
- Symfony2框架學(xué)習(xí)筆記之表單用法詳解
- Symfony2框架學(xué)習(xí)筆記之HTTP Cache用法詳解
- Symfony2學(xué)習(xí)筆記之插件格式分析
- Symfony2學(xué)習(xí)筆記之系統(tǒng)路由詳解
- Symfony2學(xué)習(xí)筆記之控制器用法詳解
- Symfony2學(xué)習(xí)筆記之模板用法詳解
- Symfony2創(chuàng)建頁面實(shí)例詳解
相關(guān)文章
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(八)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的公共函數(shù)部分,需要的朋友可以參考下2014-06-06PHP機(jī)器學(xué)習(xí)庫php-ml的簡單測試和使用方法
下面小編就為大家?guī)硪黄狿HP機(jī)器學(xué)習(xí)庫php-ml的簡單測試和使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07PHP 數(shù)據(jù)結(jié)構(gòu)隊(duì)列(SplQueue)和優(yōu)先隊(duì)列(SplPriorityQueue)簡單使用實(shí)例
這篇文章主要介紹了PHP 數(shù)據(jù)結(jié)構(gòu)隊(duì)列(SplQueue)和優(yōu)先隊(duì)列(SplPriorityQueue)簡單使用實(shí)例,需要的朋友可以參考下2015-05-05