Pergunta

Eu quero estender uma CFC em um diretório diferente e eu tenho um par de opções, mas não consigo descobrir como fazer isso:

A) Use um mapeamento dinâmico (este terá que ser dinâmico baseado no site, por exemplo, para o site ao vivo seria cfc.myPackage.MyCFC mas em um site dev seria myCfcRoot.myPackage.MyCFC) - I 'tentei expressões colocando no bit estende mas obviamente CF não gosta disso, por exemplo, :

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

ou

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

B) Providenciar um caminho relativo (de alguma forma) para o CFC para estender.

Eu temo que eu não posso fazer isso, mas eu estou esperando que há algo que eu perdi.

Foi útil?

Solução

Daniel é basicamente correta, você precisa de um mapeamento. No entanto, existem 3 soluções alternativas.

CFCs vai pegar o caminho atual como um mapeamento raiz relativa, por isso, se seus CFCs estão todos no mesmo diretório, você pode simplesmente dizer

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

Ou se os seus componentes estão em subdiretórios do cfc atual, você pode acessá-lo:

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

Em segundo lugar, se você estiver executando no ColdFusion 8, você pode definir um mapeamento em sua Application.cfc usando o struct mapeamentos como este:

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

Há duas boas referências para Application.cfc, em primeiro lugar, Exemplo de aplicação Ray de Camden. cfc que apenas dá uma bela vista que vai aonde, então o página de configurações do aplicativo CF8 vivo Docs , que tem uma seção sobre mapeamentos juntamente com alguns bons comentários.

Finalmente, você pode usar o "MyApp" built-in de mapeamento de sua raiz web, por isso, se o seu aplicativo está em um subdiretório chamado "MyApp" fora da raiz web, o mapeamento de raiz será. Digamos que você colocar corretamente seus componentes em:

wwwroot\MyApp\com\MyApp\example.cfc

O mapeamento a esta cfc, neste caso, será:

MyApp.com.MyApp.Example

E através do seu exemplo, você pode estender como esta:

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

Qualquer outra coisa, como se os seus componentes estão fora da raiz web, ou se você não tem certeza que a estrutura da pasta do seu aplicativo concluído será, e você precisará definir um mapeamento no administrador de CF.

Outras dicas

A menos que o CFC está no mesmo diretório que o script chamando o CFC devem ser localizados e referenciado a partir de um caminho relativo a um "mapeamento".

Eu descobri que às vezes você precisa ter certeza de que "/" é mapeado para o seu documento raiz do seu servidor web e que se torna a base para todos os caminhos relativos. Ou você pode configurar um mapeamento para um diretório CFC que realizar todos os seus CFCs comuns.

Esta tela é encontrado no ColdFusion de administração em "Configurações do servidor." -> "mapeamentos"

Agora, isso só é testado em CF8 assim outro motor podem diferir.

Se você quiser usar caminhos relativos para estender aplicativos que você pode, mas o seu tem que iniciá-los com um " / .". Por exemplo, você pode fazer isso para estender um Application.cfc de sua raiz web no diretório abaixo você Webroot:

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

Agora vamos dizer que eu tenho os seguintes caminhos no meu aplicativo:

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

vamos dizer que o Application.cfc em [webroot] / 1/1-A estende o Application.cfc em [webroot] . agora eu quero colocar um Application.cfc em [webroot] / 2 e estender a Application.cfc em [webroot] / 1/1-A . Tudo o que eu teria que fazer no meu [webroot] /2/application.cfc é o seguinte:

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

Esperamos que este sentido marcas.

Em relação ao Método B. Isso pode ser feito usando um arquivo adicional no seu exemplo. É um arquivo extra por cfc que você deseja estender por diretório que você deseja estender a partir.

Os 3 arquivos que são necessários.

  • /somepathtobasecomponent/basecomponent.cfc (arquivo de componente a sua base)
  • /pathtoworkingcfc/function.cfc (o arquivo com o atributo extends)
  • /pathtoworkingcfc/basecomponent_extend.cfc (o novo arquivo que irá fazer o estendendo)

/somepathtobasecomponent/basecomponent.cfc

Nada de mudar aqui. Este permanece o mesmo.

/pathtoworkingcfc/function.cfc

na tag cffunction definir o estende a extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.cfc

conteúdo Sole do arquivo é um cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top