使用symfony命令建立項目的方法_php執行個體

來源:互聯網
上載者:User
本文執行個體講述了使用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 設定檔中加入一個新的虛擬機器主機:

 AllowOverride All Allow from All ServerName myapp.example.com DocumentRoot "/home/steve/myproject/web" DirectoryIndex index.php Alias /sf /$data_dir/symfony/web/sf   AllowOverride All  Allow from All 

注意:上面的配置中的 $data_dir 變數需要替換成你的PEAR庫目錄。例如:在*nix系統中,你可以輸入:

 Alias /sf /usr/local/lib/php/data/symfony/web/sf

你可以在安裝章節找到更多關於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.cLoadModule 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=$ svn propedit svn:ignore .

直接在SVN中的忽略列表中加入myproject子目錄,這樣提交的時候就忽略了:

cachelog

儲存然後退出,這樣就完成了。

希望本文所述對大家基於Symfony架構的PHP程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.