Расширить CFC используя относительный путь

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

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

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

или же

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

Б) Предоставить относительный путь (как-то) к ХФУ для расширения.

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

4 ответа

Решение

Даниэль в основном правильно, вам нужно картирование. Тем не менее, есть 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 Administrator.

Теперь это проверено только в 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>

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

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

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

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

Что касается метода 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">
Другие вопросы по тегам