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

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

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

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

или же

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
0
10 522
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

Да, я так и думал, проблема в том, что я хочу иметь возможность изменять используемое отображение в зависимости от того, на каком сайте оно работает.

DEfusion 13.11.2008 18:21
Ответ принят как подходящий

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

This.mappings внутри Application.cfc только для CF 8, есть ли у вас ссылки на документы.

DEfusion 13.11.2008 19:47

Я добавил несколько справочных ссылок во второй раздел под примером.

Nathan Strutz 13.11.2008 20:59

Подход к картированию приложений потрясающий. Он устраняет одно из последних серьезных препятствий для использования типизированных компонентов.

anopres 17.11.2008 17:14

Стоит знать, что сопоставления для конкретных приложений не совпадают со стандартными сопоставлениями ColdFusion, которые вы можете создать в CF Administrator: blog.daemon.com.au/go/blog-post/…

modius 01.12.2008 03:26

Я также сделал бит this.mappings в CFMX7. В Railo я также должен указать, что использование отображения косой черты в корень, по крайней мере (т.е. this.mappings ["/"]), не нужно, поскольку Рейло каким-то волшебным образом понимает, что отображение косой черты должно ссылаться на папку с Application.cfc в нем.

Shawn Grigson 02.03.2010 23:09

Сейчас это проверено только в 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, который вы хотите расширить для каждого каталога, из которого вы хотите расширить.

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">

Другие вопросы по теме