Расширить 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">