ColdFusion Application.cfc & cfinvoke & ЭТОТ объем

При использовании CF application.cfc - для начала необходимо создать несколько переменных (в этой области), таких как this.name, this.applicationtimeout() и т. Д.

Я столкнулся с чем-то, что считаю странным, и надеюсь, что кто-нибудь сможет объяснить, почему это происходит, и возможный обходной путь.

Принято довольно много "ЭТ" переменных, которые могут работать для установки переменных, специфичных для приложения (конечно, вы должны проверить "разрешить переменные, специфичные для приложения" в CFADMIN - что я и сделал)

Одним из них является THIS.mappings - массив отображений - MINE выглядит примерно так:

this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
     '/files' = '#this.path#_my_files\'
     ,'/functions' = '#this.path#_my_functions\'
     ,'/logs' = '#this.path#_my_logs\'
};

он работает нормально - когда он установлен внутри блока cfscript в верхней части application.cfc, он работает нормально - если я помещаю этот блок скрипта в его собственный файл и включаю его в файл application.cfc

однако - в попытке сегментировать мой код - я хотел поместить ВСЕ настройки своего приложения в settings.cfc... (мысль здесь была, ЕСЛИ нужно было изменить некоторые настройки - мне не пришлось бы беспокоиться о 'где "Я не хочу разделять ЭТОТ материал на app.cfc и другие настройки приложения или сеанса в settings.cfc

Итак, я создал метод в файле settings.cfc, называемый getTHIS, и поместил туда блок сценария... затем использовал

<cfinvoke component="settings"
          method="getTHIS" 
      returnvariable="THIS" 
    />

Который РАБОТАЕТ - кроме (кажется) на сопоставлениях...

This.name и т. Д., Кажется, что все работает и устанавливается - на самом деле this.mappings также устанавливается нормально (так кажется), если я делаю

<cfdump var="#THIS#" label="THIS" />

Дамп идентичен дампу ЭТОГО, когда я установил его буквально на странице app.cfc.

ОДНАКО - любая попытка вызвать шаблон через сопоставление - приводит к стандартному "если вы хотите использовать абсолютные пути, вы должны создать отображение бла-бла-бла..."

Моей БОЛЬШОЙ целью было (при запуске приложения) сканировать каталог на наличие подкаталогов и создавать сопоставления на основе определенных подкаталогов... но если я не могу абстрагировать эту функциональность в свою собственную функцию - я буду вынужден напишите это прямо в app.cfc (который не убил бы меня, но опять же, я пытался сегментировать мой код логически... Кажется, есть ограничение того, когда и где эти сопоставления могут быть установлены... верно?

Поэтому я думаю, что главный вопрос - могу ли я установить this.mappings с помощью внешнего метода? Я думаю, я мог бы вернуть "настройки, которые я хочу", используя вызов cfc, а затем просто сделать "установить this.whwhat = возвращать форму cfc" - (это может быть мой ответ...)

Спасибо

2 ответа

Я не проверял это, но я уверен, что он будет работать, если ваш application.cfc расширяет ваши settings.cfc.

component {
    public any function getMappings() {
        var mappings = {};
        //code to get your directories etc.
        return mappings;
    }
}

component extends="settings" {
    this.name = "xxxx";
    this.mappings = getMappings();
    ...
}

Сопоставления могут быть установлены только в "псевдо-конструкторе", а не внутри любого из методов внутри Application.cfc - http://adobe.ly/QN2oX1

Вы можете попытаться установить this.mappings для результата вызова CFC (я не могу понять, почему это не будет работать), но если это зависит от сопоставления, это, вероятно, не будет работать.

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