Domanda

Voglio estendere un CFC in una directory diversa e ho un paio di opzioni, ma non riesco a capire come farlo:

A) Usa una mappatura dinamica (questa dovrà essere dinamica in base al sito, ad es. per il sito live sarebbe cfc.myPackage.MyCFC ma su un sito di sviluppo sarebbe myCfcRoot.myPackage.MyCFC) - I ho provato a inserire le espressioni nel bit esteso ma ovviamente a CF non piace, ad es :

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

o

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

B) Fornire un percorso relativo (in qualche modo) al CFC da estendere.

Temo di non poterlo fare, ma spero che ci sia qualcosa che mi è sfuggito.

È stato utile?

Soluzione

Daniel è sostanzialmente corretto, hai bisogno di una mappatura. Tuttavia, ci sono 3 soluzioni alternative.

I CFC sceglieranno il percorso corrente come relativo mapping di root, quindi se i tuoi CFC sono tutti nella stessa directory, puoi semplicemente dire

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

O se i componenti si trovano nelle sottodirectory dell'attuale cfc, è possibile accedervi:

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

In secondo luogo, se si esegue ColdFusion 8, è possibile definire un mapping nel proprio application.cfc usando la struttura dei mapping in questo modo:

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

Ci sono due buoni riferimenti per Application.cfc, in primo luogo, Esempio di applicazione di Ray Camden. cfc che offre una buona visione di ciò che va dove, quindi il pagina delle impostazioni dell'applicazione CF8 Live Docs , che contiene una sezione sui mapping con alcuni buoni commenti.

Infine, puoi utilizzare la mappatura integrata della tua radice web, quindi se la tua applicazione si trova in una sottodirectory denominata " MyApp " al di fuori della radice Web, la mappatura della radice sarà " MyApp " ;. Diciamo che hai inserito correttamente i tuoi componenti:

wwwroot\MyApp\com\MyApp\example.cfc

Il mapping a questo cfc in questo caso sarà:

MyApp.com.MyApp.Example

E usando il tuo esempio, puoi estendere in questo modo:

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

Qualsiasi altra cosa, ad esempio se i componenti sono al di fuori della radice Web o se non si è sicuri della struttura della cartella dell'applicazione finita e sarà necessario impostare un mapping nell'amministratore CF.

Altri suggerimenti

A meno che il CFC non si trovi nella stessa directory dello script chiamante, il CFC deve essere localizzato e referenziato da un percorso relativo a un "Mapping".

Ho scoperto che a volte devi assicurarti che " / " viene mappato sulla radice del documento del server Web e diventa la base per tutti i percorsi relativi. Oppure puoi impostare una mappatura per una directory CFC che contiene tutti i tuoi CFC comuni.

Questa schermata è disponibile in ColdFusion Admin in " Impostazioni server " - > & Quot; Mapping ".

Ora questo è testato solo in cf8 quindi altri motori potrebbero differire.

se si desidera utilizzare percorsi relativi per estendere le applicazioni, è possibile ma è necessario avviarle con un " /. " ;. Ad esempio puoi farlo per estendere un application.cfc dalla tua radice web nella directory sotto la tua webroot:

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

ora diciamo che ho i seguenti percorsi nella mia applicazione:

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

diciamo che application.cfc in [webroot] / 1 / 1a estende application.cfc in [webroot] . ora voglio inserire un application.cfc in [webroot] / 2 ed estendere application.cfc in [webroot] / 1 / 1a . tutto ciò che dovrei fare nel mio [webroot] /2/application.cfc è il seguente:

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

spero che abbia senso.

Per quanto riguarda il Metodo B. Può essere fatto usando un file aggiuntivo nel tuo esempio. È un file aggiuntivo per CFC che si desidera estendere per directory da cui si desidera estendere.

I 3 file richiesti.

  • /somepathtobasecomponent/basecomponent.cfc (il file del componente di base)
  • /pathtoworkingcfc/function.cfc (il file con l'attributo extends)
  • /pathtoworkingcfc/basecomponent_extend.cfc (il nuovo file che farà l'estensione)

/somepathtobasecomponent/basecomponent.cfc

Nulla da cambiare qui. Questo rimane lo stesso.

/pathtoworkingcfc/function.cfc

nel tag cffunction imposta le estensioni su extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.cfc

L'unico contenuto del file è un cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top