2008-11-13 17 views
9

Chcę rozszerzyć CFC w innym katalogu i mam kilka opcji, ale nie można dowiedzieć się, jak to zrobić:Rozszerz CFC za pomocą ścieżki względnej

A) Używaj dynamicznego mapowania (to będzie musiał być dynamiczne oparte na miejscu, na przykład na żywo miejscu byłoby cfc.myPackage.MyCFC ale na miejscu dev byłoby myCfcRoot.myPackage.MyCFC) - próbowałem oddanie do wyrażenia extends trochę ale oczywiście CF tego nie lubi, np :

<cfcomponent name="MyComponent" extends="#config.cfcRoot#.BaseComponent"> 

lub

<cfcomponent name="MyComponent" extends="#GetRealPath(../BaseComponent.cfc)#"> 

b) dostarcza względnej ścieżki (jakoś) do CFC rozszerzenia.

Obawiam się, że nie mogę tego zrobić, ale mam nadzieję, że coś jest nie tęskniłem.

Odpowiedz

10

Daniel jest w zasadzie poprawna, trzeba mapowanie. Istnieją jednak 3 obejścia.

CFC wzrośnie bieżącą ścieżkę jako względną mapowania głównego, więc jeśli CFC są w tym samym katalogu, można po prostu powiedzieć

<cfcomponent name="MyComponent" extends="Example"> 

lub jeśli elementy są w podkatalogach z obecnego CFC masz do niego dostęp:

<cfcomponent name="MyComponent" extends="subdirectory.Example"> 

po drugie, jeśli są uruchomione na ColdFusion 8, można zdefiniować odwzorowanie w application.cfc użyciu mapowania struktury słuszne:

<cfset this.mappings["/MyApp"] = expandPath(".") /> 

Istnieją dwie dobre referencje dla Application.cfc, po pierwsze, Ray Camden's example Application.cfc, która po prostu daje ładny widok na to, co się dzieje, następnie stronę CF8 Live Docs application settings, która zawiera sekcję o mapowaniach wraz z kilkoma dobrymi komentarzami.

Wreszcie możesz skorzystać z wbudowanego mapowania swojego katalogu głównego, więc jeśli twoja aplikacja znajduje się w podkatalogu o nazwie "MojaAplikacja" poza katalogiem głównym, mapowanie główne będzie "MyApp".Powiedzmy, że prawidłowo umieścić swoje komponenty w:

wwwroot\MyApp\com\MyApp\example.cfc 

Mapowanie do tego CFC w tym przypadku będzie:

MyApp.com.MyApp.Example 

i korzystania przykład, można rozszerzyć tak:

<cfcomponent name="MyComponent" extends="MyApp.com.MyApp.Example"> 

Coś jeszcze, np. Jeśli twoje komponenty znajdują się poza katalogiem głównym lub jeśli nie masz pewności, jaka będzie struktura folderów ukończonej aplikacji i będziesz musiał ustawić mapowanie w Administracji CF słup.

+0

Czy to odwzorowania wewnątrz Application.cfc tylko dla CF 8, czy masz linki do dokumentów. – DEfusion

+0

Dodałem kilka odnośników do drugiej sekcji w ramach przykładu. –

+0

Podejście do mapowania aplikacji. Naprawia jedną z ostatnich dużych przeszkód w używaniu wpisanych komponentów. – anopres

2

ile CFC jest w tym samym katalogu co skrypt wywołujący KSZ muszą być zlokalizowane i odwołuje ze ścieżki w stosunku do „mapowania”.

Zauważyłem, że czasami trzeba się upewnić, że "/" jest zmapowane do katalogu głównego twojego serwera i to staje się podstawą dla wszystkich ścieżek względnych. Możesz też skonfigurować mapowanie dla katalogu CFC zawierającego wszystkie popularne CFC.

Ten ekran znajduje się w ColdFusion Admin w "Ustawienia serwera" -> "Odwzorowania".

+0

Tak pomyślałem, tyle, że problem jest chcę móc zmienić mapowanie to zastosowań w zależności od tego, co witryna jest uruchomiona pod. – DEfusion

2

Teraz jest to testowane tylko w Cf8, więc inny silnik może się różnić.

Jeśli chcesz użyć względnych ścieżek do rozszerzenia aplikacji, możesz to zrobić, ale musisz zacząć od "/.". Na przykład można to zrobić, aby rozszerzyć application.cfc z korzenia internetowej w katalogu poniżej ty Webroot:

<cfcomponent output="false" extends="/.application"> 
<!--- whatever code you have ---> 
</cfcomponent> 

teraz powiedzmy mam następujące ścieżki w mojej aplikacji:

[webroot]/1/1a 
[webroot]/2 

powiedzmy że application.cfc w [webroot]/1/1a rozszerza application.cfc w [webroot]. teraz chcę umieścić application.cfc w [webroot]/2 i rozszerzyć application.cfc w [webroot]/1/1a. wszystko, co musiałby zrobić w moim [Webroot] /2/application.cfc jest następujący:

<cfcomponent output="false" extends="/./1/1a/application"> 
<!--- whatever code you have ---> 
</cfcomponent> 

nadzieja to sens.

0

Jeśli chodzi o metodę B. Można to zrobić za pomocą dodatkowego pliku w swoim przykładzie. Jest to jeden dodatkowy plik na cfc, który chcesz rozszerzyć na katalog, z którego chcesz rozszerzyć.

3 wymagane pliki.

  • /somepathtobasecomponent/basecomponent.cfc (plik składnik podstawowy)
  • /pathtoworkingcfc/function.cfc (plik z rozciąga atrybutu)
  • /pathtoworkingcfc/basecomponent_extend.cfc (nowy plik, który będzie wykonać powiększenia)

/somepathtobasecomponent/basecomponent.cfc

nic, aby zmienić tutaj . To pozostaje takie samo.

/pathtoworkingcfc/function.cfc

w znaczniku cffunction ustawić obejmuje extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.CFC

Sole zawartość pliku jest cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc"> 
Powiązane problemy