Расширить CFC используя относительный путь - PullRequest
9 голосов
/ 13 ноября 2008

Я хочу расширить CFC в другой каталог, и у меня есть несколько вариантов, но не могу понять, как это сделать:

A) Использовать динамическое сопоставление (оно должно быть динамическим в зависимости от сайта, например, для живого сайта это будет cfc.myPackage.MyCFC, но на сайте разработчика это будет myCfcRoot.myPackage.MyCFC) я пытался вставить выражения в бит extends, но очевидно, что CF это не нравится, например :

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

или

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

B) Укажите относительный путь (каким-либо образом) к CFC для расширения.

Я боюсь, что не могу этого сделать, но я надеюсь, что есть кое-что, что я пропустил.

Ответы [ 4 ]

10 голосов
/ 13 ноября 2008

Даниэль в основном правильно, вам нужно отображение. Тем не менее, есть 3 обходных пути.

CFC выберет текущий путь в качестве относительного корневого сопоставления, поэтому, если все ваши CFC находятся в одном каталоге, вы можете просто сказать

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

Или, если ваши компоненты находятся в подкаталогах текущего cfc, вы можете получить к нему доступ:

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

Во-вторых, если вы работаете в ColdFusion 8, вы можете определить сопоставление в вашем application.cfc, используя структуру сопоставлений следующим образом:

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

Есть две хорошие ссылки на Application.cfc, во-первых, Пример Рэя Камдена Application.cfc , который просто дает хорошее представление о том, что происходит, а затем настройки приложения CF8 Live Docs страница, на которой есть раздел о сопоставлениях и несколько хороших комментариев.

Наконец, вы можете использовать встроенное отображение вашего веб-корня, поэтому, если ваше приложение находится в подкаталоге с именем «MyApp» вне веб-корня, ваше корневое отображение будет «MyApp». Допустим, вы правильно поместили свои компоненты в:

wwwroot\MyApp\com\MyApp\example.cfc

Сопоставление этому cfc в этом случае будет:

MyApp.com.MyApp.Example

И, используя ваш пример, вы можете расширить это так:

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

Все остальное, например, если ваши компоненты находятся за пределами корневого веб-каталога, или если вы не уверены, какой будет структура папок вашего готового приложения, и вам нужно будет установить сопоставление в администраторе CF.

2 голосов
/ 19 ноября 2008

Теперь это проверено только в cf8, поэтому другой двигатель может отличаться.

Если вы хотите использовать относительные пути для расширения приложений, вы можете запустить их с " /. ". Например, вы можете сделать это, чтобы расширить application.cfc из корневого веб-каталога в каталог под вашим веб-корнем:

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

Теперь предположим, что в моем приложении есть следующие пути:

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

допустим, что application.cfc в [webroot] / 1 / 1a расширяет application.cfc в [webroot] . Теперь я хочу разместить файл application.cfc в [webroot] / 2 и расширить файл application.cfc в [webroot] / 1 / 1a . все, что мне нужно сделать в моем [webroot] /2/application.cfc, это следующее:

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

надеюсь, что это имеет смысл.

2 голосов
/ 13 ноября 2008

Если CFC не находится в том же каталоге, что и вызывающий сценарий, CFC должен быть расположен и ссылаться на путь относительно «сопоставления».

Я обнаружил, что иногда вам нужно убедиться, что "/" сопоставлен с корнем вашего документа вашего веб-сервера, и это становится основой для всех относительных путей. Или вы можете настроить сопоставление для каталога CFC, в котором хранятся все ваши общие CFC.

Этот экран находится в администраторе ColdFusion в разделе «Настройки сервера» -> «Сопоставления».

0 голосов
/ 05 июля 2012

Что касается метода B. Это можно сделать с помощью дополнительного файла в вашем примере. Это один дополнительный файл для каждого cfc, который вы хотите расширить для каждого каталога, из которого вы хотите расширить.

3 необходимых файла.

  • / somepathtobasecomponent / basecomponent.cfc (файл базового компонента)
  • / pathtoworkingcfc / function.cfc (файл с атрибутом extends)
  • / pathtoworkingcfc / basecomponent_extend.cfc (новый файл, который будет выполнять расширение)

/ somepathtobasecomponent / basecomponent.cfc

Здесь нечего менять. Это остается прежним.

/ pathtoworkingcfc / function.cfc

в теге cffunction устанавливает расширение до extends="basecomponent_extend"

/ pathtoworkingcfc / basecomponent_extend.cfc

Единственное содержимое файла: cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...