1. 程式人生 > >symfony權威指南(3)之symfony配置

symfony權威指南(3)之symfony配置

在開始閱讀本文之前建議先閱讀筆者之前的一篇博文 yaml檔案的語法及注意事項,瞭解一些關於yaml方面的相關知識。

第一次接觸symfony的人可能會不太習慣symfony的配置檔案,因為symfony的配置檔案實在是太多了,而且還分了很多的層級,不過相信隨著後期學習的深入,你會了解到symfony的這些配置檔案給開發帶來了很大的靈活性,利大於弊。

一、配置

1、專案配置(project)

專案相關的配置檔案存放在專案根目錄下的config目錄下,如下截圖所示:


各個配置檔案的相關說明:

databases.yml:該檔案主要用來存放資料庫連線設定,可以被應用程式級的配置覆蓋

properties.ini:這個檔案存放命令列工具需要的引數,包括專案名稱,遠端伺服器的連線設定

rsync_exclude.txt:這個檔案定義同步伺服器的時候哪些檔案不需要同步

schema.yml 與 propel.ini:這兩個檔案是Propel(symfony 的ORM 層)的資料訪問配置檔案。它們用來使Propel 與symfony 的類還有專案的資料協同工作。propel.ini 是自動生成的,所以你不用修改它。如果你不用Propel,就不需要這些檔案。

2、應用程式配置(apps)

相關應用程式的配置檔案存放在應用程式下的config目錄下,如下圖所示:


各個配置檔案的相關說明:

app.yml:這個檔案存放應用程式相關的配置資訊,包括定義業務或者程式邏輯的全域性變數,這些都不需要存放在資料庫裡。稅率,運費,e-mail

地址等經常存放在這個檔案。這個檔案預設是空的。

factories.yml:symfony 在這裡定義處理檢視、請求、迴應、會話(session)等的類。如果你想用你自己的類取代symfony 的類,你可以在這裡定義它們。

filters.yml:過濾器是在每個請求都被執行的一小段程式碼。這個檔案用來定義哪些過濾器需要被執行,每個模組都可以改寫過濾器配置。

settings.yml:這個檔案存放symfony 應用程式的主要配置資訊。你的應用程式是否使用國際化功能,它的預設語言,請求timeout 時間,是否開啟快取功能等都在這個檔案裡面定義。只要改變這個檔案裡的一行程式碼,你就可以關閉網站來執行維護升級器是在每個請求都被執行的一小段程式碼。這個檔案用來定義哪些過濾器需要被執行,每個模組都可以改寫過濾器配置。

routing.yml:路由規則,能把難以理解的不好記憶的URL 變成"漂亮"的直觀形式。此配置檔案用來存放這些資訊。每個新應用程式都會有一些預設路由規則。

view.yml:這個檔案裡定義預設檢視的結構(佈局的名稱,標題,還有metatag;預設載入的樣式表及Javascript;預設的content-type 等)。還有預設的meta 與標題標籤。

3、模組配置(module)

預設情況下,模組沒有特別的配置資訊。不過,如果你需要,你可以為某個模組覆蓋應用程式級的配置。例如,你需要修改一個模組裡所有動作的HTML 描述資訊,或是載入一個特定的Javascript 檔案。你可以選擇針對某個特定的模組增加新引數來實現保護性封裝。

比如建立如下圖所示的目錄和檔案:


generator.yml:根據資料庫表自動生成的模組(腳手架與管理後臺)會用這個檔案, 它用來定義介面怎麼顯示行和列,使用者可以執行哪些操作(過濾器,排序,按鈕等)。

module.yml:這個檔案包含模組的特殊引數(相當於app.yml,但這是模組級的),還有動作的配置資訊。

security.yml:這個檔案用來給動作設定訪問限制。你可以在這裡設定哪個頁面只能給註冊使用者看或是一部分有特殊許可權的註冊使用者看。

view.yml:這個檔案包含模組的一個或者所有動作的檢視配置資訊。它會覆蓋應用程式級的view.yml。

資料驗證檔案:雖然這些用來驗證表單輸入資料的YAML 資料驗證檔案存放在validate/目錄而不是config/目錄裡,它們仍然屬於模組配置檔案。


二、環境

如果你有過一些開發經驗的話,你就會清楚再不同的開發環境下,配置是不同的,比如線上和線下的資料庫配置資訊肯定是不同的,那麼如何在symfony中配置不同的開發環境呢?其實很簡單,下面是一個示例:

symfony 配置檔案的結構
# 生產環境設定
prod:
...
# 開發環境設定
dev:
...
# 測試環境設定
test:
...
# 自定義環境設定
myenv:
...
# 所有環境的設定
all:
...

任何一個特定環境裡定義的引數優先於所有環境裡定義的引數,所有環境裡的引數優先於預設配置。模組配置裡的引數優先於應用程式級裡定義的同樣引數,應用程式裡的引數優先於專案級。這可以通過下面的優先順序列表來表示:
1. 模組
2. 應用程式
3. 專案
4. 特定的環境

5. 所有環境

6. 預設

三、獲取配置資訊

在symfony框架中可以使用syConfig類來獲取在配置檔案中存放的資訊,下面是一個示例:

在app.yml檔案中定義appid和appsecret:

all:
  appid: wechatAppid
  appsercet: wechatAppserecet

注:symfony有配置快取,如修改了配置檔案,需要清理配置檔案快取,可以使用如下命令清除symfony框架的配置快取:

執行完此命令後仔細觀察cache目錄的變化,會發現cache目錄下的檔案都被清空了(目錄結構還繼續保留)


在控制器中獲取:
$host = sfConfig::get('app_appid');
引數的名字由幾部分組成,中間用下劃線分割,順序如下:
① 與配置檔名有關的字首 (sf_ 代表 settings.yml, app_ 代表app.yml, mod_ 代表 module.yml, sf_i18n_ 代表 i18n.yml,sf_logging_ 代表 logging.yml)
② 父鍵名 (如果有), 小寫形式
③ 鍵名, 小寫形式

symfony 支援在YAML 檔案裡使用常量。如果遇到%包起來的大寫形式的設定名(可以通過sfConfig::get()取得值),配置檔案處理器會用這個設定的當前值來替換這個常量。

autoload.yml中的示例:

autoload:
symfony:
name: symfony
path: %SF_SYMFONY_LIB_DIR%
recursive: on
exclude: [vendor]
path 引數的值會是執行sfConfig::get('sf_symfony_lib_dir')的結果。如果一個配置檔案依賴於另一個配置檔案,被依賴的配置檔案必須先被解析(請查symfony 的原始碼來了解配置檔案載入的順序)。app.yml 是最後被解析的檔案之一,所以你可以在這個檔案裡使用其它檔案裡定義的設定。

除此之外,symfony的YAML 檔案可以包含PHP程式碼,下面是一個示例:

all:
translation:
format: <?php echo sfConfig::get('sf_i18n') == true ? 'xliff' :
'none' ?>

相關推薦

symfony權威指南3symfony配置

在開始閱讀本文之前建議先閱讀筆者之前的一篇博文 yaml檔案的語法及注意事項,瞭解一些關於yaml方面的相關知識。 第一次接觸symfony的人可能會不太習慣symfony的配置檔案,因為symfony的配置檔案實在是太多了,而且還分了很多的層級,不過相信隨著後期學習的深

Maven權威指南多模組專案構建及POM優化

  在《Maven權威指南》部分I中,第6、7章介紹了多模組專案及多模組企業級專案的構建思想。對於多模組的情況,無論是簡單的或是企業級的,對於POM來說,重點就是分析處理好父POM與子POM之間的關係,包括依賴管理(DependencyManagement)、外掛管理(Plu

bfzwjeqjSpriNgMc學習系列3url

ref htm 學習 pri blank url lan get 系列 bfzwjeqjSpriNgMc學習系列(3)之url χ絳 bfzwjeqjSpriNgMc學習系列(3)之urlbfzwjeqjSpriNgMc學習系列(3)之url

安卓MP3播放器開發實例3進度條和歌詞更新的實現

tac run detail datetime style mem poll() arc call 上一次談了音樂播放的實現,這次說下最復雜的進度條和歌詞更新。因為須要在播放的Activity和播放的Service間進行交互,所以就涉及了Activi

連表查詢3根據相關條件,查詢另外一個表或多個表的某字段

兩個 mode object 添加 就會 resultmap control var 多個 1、送檢單位 代理商是從代理商表中取得數據 銷售人員從銷售表中取得數據 說一個簡單的思路: sql語句找到連接兩個表的條件,把另外一個表要用到的字段 寫一個 <re

我的改進版20483智能自己主動

實現 view 優先 cli span data- sso b2c avi 今天給2048加了個智能自己主動的功能,點擊之後自己主動操作。但因為還不夠優化,效果一般

git命令行3遠程版本庫

git一、遠程版本庫相關概念 1.裸版本庫和開發版本庫 裸版本庫就是不含有工作區的版本庫,而我們平常開發的代碼庫都是開發版本庫,修改工作區,然後進行提交、推送提交等操作。可以使用git init --bare命令創建一個裸版本庫。裸版本庫一般作為服務器上的版本庫。 2.refspec 引用空間把遠程分支版本庫

讀書筆記--Android Gradle權威指南

說了 聲明 通過命令 google robot 結構 信息 我只 cati 最近看了一本書《Android Gradle 權威指南》,對於 Gradle 理解又更深了,但不想過段時間就又忘光了,所以打算寫一篇讀書筆記,將書中一些我個人覺得蠻有用的點記錄、總結一下。 前言 首

Java + selenium 元素定位3By TagName

input 等等 網頁 news ren pub static 做的 bug 本篇介紹findElement接口中的By TagName方法。首先,要知道什麽是tagname。之前我們使用F12開發者工具查看網頁元素是,發現每行代碼前都有<input&g

打地鼠遊戲3動畫效果

rand pre 繼續 ood 擴展 child timeout cti java 在第一篇中,我們已經實現了單擊開始後遊戲的倒計時,那麽下面,我們需要繼續在Game這個簡直對對象中進行擴展屬性和方法: 首先我們需要在Game中添加幾組初始鍵值對: //所有的地鼠dom元

nginx3反向代理

代理服務 .com 直接 響應 服務器 上網行為管理 origin server 原來 反向代理 原理 1、客戶機在發起請求時,不會直接發送給目的主機,而是先發送給代理服務器; 2、代理服務器接收客戶機請求後,再向業務服務器發出請求; 3、業務服務器 接收請求、處理

nginx3反向代理、限速

反向代理 原理 1、客戶機在發起請求時,不會直接傳送給目的主機,而是先發送給代理伺服器; 2、代理伺服器接收客戶機請求後,再向業務伺服器發出請求; 3、業務伺服器 接收請求、處理請求 最後 響應請求; 3、代理伺服器接收業務主機返回的資料; 4、代理伺服器響應客戶端請求; 5、客戶端通過瀏覽器渲

Testbench編寫指南3模組化工程的模擬方法

Testbench編寫指南(3)模組化工程的模擬方法 文章轉自:https://blog.csdn.net/FPGADesigner/article/details/80816066 文章目錄 Testbench編寫指南(3)模組化工程的模擬方法

Tuxedo與Weblogic互連指南3--測試

Weblogic呼叫Tuxedo Weblogic呼叫Tuxedo示例程式 WTC的EJB示例程式TOLOWER Tuxedo Simpapp示例 1、編寫測試程式,使用web專案,引入必要jar,編寫in

KgoUI3 vue + Sass

    框架原始碼:碼雲      直接上步驟: 第一:sass需要的模組 (沒有安裝cnpm 就用 npm咯)   cnpm install --save-dev sass-loader cn

Spring3 Spring事務管理

Spring AOP Spring JDBC Spring 使用 AOP對事務進行實現 Spring 宣告式事務實現: XML方式 XML檔案中配置資料庫連線池、事務管理器、事務增強、aop:事務管理器中 ref引用 dataSource資料來源;事務增強中 tran

JVM調優3垃圾回收

從這篇開始我們開始探討一些jvm調優的問題。在jvm調優中一個離不開的重點是垃圾回收,當垃圾回收成為系統達到更高併發量的瓶頸時,我們就需要對jvm中如果進行“自動化”垃圾回收技術實施必要的監控和調節。 對於調優之前,我們必須要了解其執行原理,java 的垃圾收集Garbage Col

Android程式設計權威指南3ed挑戰練習遇到的問題

第十二章,練習2,將DatePickerFragment用Activity託管,程式碼寫的和網上的論壇上的幾乎一樣,就是在點選日期button時,顯示“很抱歉,CriminalIntent無響應”,然後應用退出。開始以為是和書上的程式碼不一樣,版本不一樣,資料庫操作之類的問題,後來把書上本章節的程式碼和論壇

MyBatis3MyBatis全域性配置檔案

全域性配置檔案(如SqlMapConfig.xml) configuration配置 properties屬性 setting設定 typeAliases型別命名 typeHandlers型別處理器 objectFactory物件工廠 plugins外掛 en

Springboot 二3逆向工程

逆向工程: 在企業中,設計階段會進行表設計,建立逆向工程,由資料表——》Java程式碼; 需要:mapper.xml、mapper.java、POJO表名(表名.java); 配置: 所需 .jar包,資料庫驅動包 需要配置的地方:(根據 generatorC