Как я храню CFCs в отдельном каталоге и заставляю их работать?

Существует ли способ указать путь компонента в теге?

Я использую Компоненты ColdFusion для своего приложения. Мое приложение имеет несколько папок, однако, и каждый раз, когда я хочу, чтобы CFC работал, я должен сохранить его в том же каталоге как те файлы, которые должны получить доступ. Это приводит к моему созданию нескольких файлов CFC, которые идентичны.

Существует ли способ сохранить мой CFCs в одном каталоге и заставить его работать через мой сайт?

8
задан Adam Tuttle 4 March 2010 в 14:20
поделиться

3 ответа

Как отмечали другие, вы можете делать интересные вещи с сопоставлениями и функциями, которые определяют местонахождение корня вашего приложения, но в основе вашего вопроса лежит общий путь Технические характеристики.

Я предлагаю вам прочитать часть документации Использование компонентов ColdFusion под названием Указание местоположения CFC .

По сути, это говорит о том, что если ваше приложение находится по адресу http://example.com/myApp/ , а у вас есть страница по адресу http://example.com/myApp/ foo / bar / fubar.cfm , который хочет использовать компонент по адресу:

/myApp/foo/components/library/fubar.cfc

, тогда fubar.cfm должен сделать что-то вроде этого:

<cfset fubar=createObject("component", "myApp.foo.components.library.fubar") />

Вы берете путь к файлу и заменяете косые черты точками (aka "точка обозначение "), а также удалите" .cfc "из имени файла компонента, который вы хотите загрузить.

Кроме того, вы можете использовать именованные сопоставления (как описал Аарон), поэтому, если вы создаете сопоставление с именем / components , которое указывает на / myApp / foo / components / , тогда ваше Вызов createObject будет выглядеть так:

<cfset fubar = createObject("component", "components.library.fubar") />

Те же пути с точечной нотацией могут использоваться в как часть атрибута компонента :

<cfinvoke component="components.library.fubar" ... />
10
ответ дан 5 December 2019 в 08:23
поделиться

Для ColdFusion 9

FileSystem

/
  lib/
    DataAccess.cfc
    IndexingService.cfc
  app/
    Application.cfc
    index.cfm

Файл: /app/Application.cfc

component {
  root = goUpDirectory(2, GetCurrentTemplatePath());
  This.mappings["/lib"] = "#root#/lib";
  This.mappings["/app"] = "#root#/app";

  function goUpDirectory(levels, path) {
    for(levels = levels; levels >= 1; levels -= 1) {
      path = GetDirectoryFromPath(path);
      path = Left(path, Len(path) - 1);
    }
    return path;
  }
}

Файл: /app/controllers/UsersController.cfc

component {
  ...
  da = new lib.DataAccess();
  ...
}

Для ColdFusion 8

То же, что и выше, только с использованием CreateObject вместо new , < cfcomponent /> вместо component {} и т. д.

4
ответ дан 5 December 2019 в 08:23
поделиться

Здесь можно поступить по-разному. Я бы рекомендовал поместить компоненты туда, где они имеют смысл (root/com, или root/models, или что-то еще), а затем ссылаться на них из базы приложения.

В администраторе ColdFusion вы можете установить сопоставленный путь к корню вашего приложения и ссылаться на ваши компоненты по этому пути.

myObject = createObject('component','nameOfMyMapping.models.service.answerStackOverflowQuestions');

Вы также можете выполнить некоторую логику в вашем Application.cfm / Application.cfc, чтобы найти корень приложения динамически. Этот метод не требует специальных разрешений и будет работать, если вы переместите приложение в другую среду. Быстрый поиск в Google обнаружил запись в блоге Питера Фрейтага с функцией, которая делает именно это. Только не забудьте заменить .cfm, если вы используете приложение .cfc. http://www.petefreitag.com/item/630.cfm

CFLib.org также имеет метод, который, похоже, найдет корневой путь за вас. http://www.cflib.org/udf/GetRootPath

После того, как вы сохранили корневой путь в переменной, все становится проще.

myObject = createObject('component','#myRoot#.models.service.answerStackOverflowQuestions');

Наконец, многие фреймворки сделали эту и многие другие распространенные задачи очень простыми. Вы можете выбрать практически любой фреймворк ColdFusion. Кто-то уже изобрел колесо ;).

Веселитесь!

6
ответ дан 5 December 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: