Mam problem z ustawianiem odwzorowań w Application.cfc Mamy serwer diverent (dev, QS, prod) Każdy z nieco innym Pathes. Chcę ustawić patsy i zmienne specyficzne dla serwera poprzez plik konfiguracyjny. Na ApplicationStart czytasz plik ini i konfigurujesz system. http://www.raymondcamden.com/index.cfm/2005/8/26/ColdFusion-101-Config-Files-AGoGo To działa dobrze.Jak dołączyć odwzorowania do Application.cfc z zewnętrznego pliku właściwości?
Normaly ustawienie mapowania w Applcation.cfc tak:
<!--- in Application.cfc --->
<cfset this.mappings['/components'] = "D:\Inetpub\wwwroot\myApp\components">
gdzieś w normalnym cfm pliku I instatiate CFC nazwie testu poprzez:
<cfset t = createObject("component", "components.test")>
Chcę ustawić tylko mapowania raz na 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>
Ale to nie działa, ponieważ to odwzorowanie jest puste i następne żądanie. :(
Umieszczenie to 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>
pojawia się błąd, że komponent nie można znaleźć. To jest dziwne.
Umieszczenie struct w zakresie aplikacji
<cfloop index="key" list="#sections.mappings#">
<cfset APPLICATION.mappings[key] = getProfileString(application.ini.iniFile, "mappings", key)>
</cfloop>
Jak połączyć się z moim komponentem?
<cfset t = createObject("component", "application.components.test")>
Nie działa.
Mam więc 3 cele.
- przeczytaniu wszystkich Ścieżki edukacyjne i mapowania z pliku ini
- je czytać raz na ApplicationStart
- łatwe zastosowanie w źródłowego.
Dziękuję bardzo za duży krok w dobrym kierunku. Ale z powodu tego wiersza Otrzymuję komunikat "Nie znaleziono błędu" podczas wywoływania strony, która nie znajduje się w katalogu webroot. –
inog
Nie chcę tego zakodować. Każdy pomysł na ten dylemat z kurczaka lub jajka? – inog
To dlatego, że wywołuje metodę expandpath() względem aktualnej lokalizacji pliku. Będziesz musiał użyć bezwzględnej ścieżki, zaktualizowałem moją odpowiedź, aby pokazać to –