Tôi gặp sự cố khi đặt ánh xạ trong Application.cfc Chúng tôi có Máy chủ phân kỳ (dev, QS, prod) Mỗi một đường dẫn khác nhau. Tôi muốn đặt đường dẫn và biến máy chủ cụ thể thông qua tệp cấu hình. Trên ApplicationStart bạn đọc tệp ini và thiết lập hệ thống của bạn. http://www.raymondcamden.com/index.cfm/2005/8/26/ColdFusion-101-Config-Files-AGoGo Tính năng này hoạt động tốt.Làm cách nào để đưa ánh xạ vào Application.cfc từ tệp thuộc tính bên ngoài?
Normaly bạn thiết lập ánh xạ trong Applcation.cfc như thế này:
<!--- in Application.cfc --->
<cfset this.mappings['/components'] = "D:\Inetpub\wwwroot\myApp\components">
Một nơi nào đó trong một cfm tập tin bình thường tôi instatiate một CFC tên thử nghiệm qua:
<cfset t = createObject("component", "components.test")>
Tôi muốn thiết lập ánh xạ chỉ một lần tại onApplicationsStart
<cffunction
name="OnApplicationStart"
access="public"
returntype="boolean"
output="false"
hint="Fires when the application is first created.">
<!---create structure to hold configuration settings--->
<cfset ini = structNew()>
<cfset ini.iniFile = expandPath("./ApplicationProperties.ini")>
<cfset application.ini = ini>
<!--- read ini file --->
<cfset sections = getProfileSections(application.ini.iniFile)>
<cfloop index="key" list="#sections.mappings#">
<cfset this.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)>
</cfloop>
Nhưng điều này không làm việc vì các ánh xạ này trống và yêu cầu tiếp theo. :(
Đưa này để OnRequestStart
<!--- read ini file --->
<cfset sections = getProfileSections(application.ini.iniFile)>
<cfloop index="key" list="#sections.mappings#">
<cfset this.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)>
</cfloop>
tôi nhận được một lỗi mà các thành phần không thể tìm thấy. Đây là kỳ lạ.
Đưa struct vào phạm vi ứng dụng
<cfloop index="key" list="#sections.mappings#">
<cfset APPLICATION.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)>
</cfloop>
Làm cách nào để gọi Thành phần của tôi?
<cfset t = createObject("component", "application.components.test")>
Không hoạt động.
Vì vậy, tôi có 3 mục tiêu.
- đọc tất cả pathes và ánh xạ từ tập tin ini
- đọc chúng một lần tại ApplicationStart
- sử dụng dễ dàng trong sourcecode.
Cảm ơn rất nhiều điều này đã mang đến cho tôi một bước tiến đúng đắn. Nhưng vì dòng này Tôi gặp lỗi "không tìm thấy" khi gọi một trang không có trong webroot. –
inog
Tôi không muốn mã hóa nó. Bất kỳ ý tưởng nào về tình trạng khó xử của gà hoặc trứng này? – inog
Thats vì đường mở rộng gọi() của nó liên quan đến vị trí tệp hiện tại. Bạn sẽ phải sử dụng đường dẫn tuyệt đối, tôi đã cập nhật câu trả lời của mình để hiển thị số –