2015-10-12 2 views
2

В соответствии с заголовком - Может ли компонент отдыха в ColdFusion получить доступ к области Application? Мое начальное тестирование, похоже, указывает на то, что оно не может, однако, это, безусловно, может быть в Railo/Lucee - так что мне интересно, возможно, я что-то не так?Может ли компонент доступа получить доступ к области приложения?

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

То, что кажется странным, что если я попытаюсь возвращать Application области видимости, не существует, я получаю сообщение я бы ожидать:

Element FOO is undefined in APPLICATION. 

В то время как, если я пытаюсь возвращать Application переменной, область видимости ли существует, я получаю следующее - предполагая, что Application сферы недоступна в этом контексте:

Variable APPLICATION is undefined. 

на данный момент, речь идет о фа irly moot - реализация REST CF настолько неудобна, что я думаю, что собираюсь переехать к Taffy, но работы Railo/Lucee так хорошо сравниваются. Я просто не могу упустить возможность, что я что-то испортил.

Вот некоторые тестовый код, для тех, кто может быть заинтересован:

<cfcomponent 
    output  = "false" 
    rest  = "true" 
    restpath = "/hello/" 
    > 

    <cffunction 
     name   = "world" 
     returntype  = "string" 
     httpmethod  = "GET" 
     access   = "remote" 
     > 

     <cfreturn Application.Foo /> 

    </cffunction> 

</cfcomponent> 
+0

Я думаю, что сообщение об ошибке 'Element FOO undefined in APPLICATION' является красной селедкой. Если вы вызываете неопределенную переменную, такую ​​как 'foo.bar', сообщение об ошибке будет« Элемент BAR не определен в FOO'. Как выглядит ваш Application.cfc и является ли cfc частью этого приложения (в пути)? –

+0

Достаточно честный ... Путь может быть проблемой, он находится вне корня сети со всеми моими другими CFC и имеет сопоставление с ним. У меня нет доступа к репо прямо сейчас, но похоже, что это может быть проблемой. Я не понимал, что это должно быть под корнем в сети, но теперь я думаю об этом. Я предполагаю, как еще удаленный экземпляр CFC знает, к какому приложению это принадлежит ?! –

+0

Действительно, в этом была проблема. Отлично работает, если я помещаю его под веб-корнем. Я бы подумал, так как я настраиваю папку REST в Application.cfc, он сможет связать ее с этим приложением или хотя бы назвать это в этом контексте, но, увы, похоже, что нет. Спасибо за предложение! –

ответ

0

Повышен от комментариев

Я думаю, что сообщение об ошибке Element FOO is undefined in APPLICATION является отвлекающим маневром. Если вы вызываете неопределенную структурную переменную, такую ​​как foo.bar, сообщение об ошибке будет Element BAR is undefined in FOO. В вашем случае это выглядит как область приложения, но я не думаю, что это действительно так.

Где находится cfc, относящийся к вашему файлу Application.cfc (в пути)? Помните, что ColdFusion будет искать файл Application.cfc в той же папке вызываемого шаблона, и если он не найден, начнется поиск дерева каталогов для одного. Если ваш cfc не находится в иерархии файла Application.cfc, то он не будет частью этого приложения, поскольку ColdFusion видит это. Here is some more information on this feature from Charlie Arehart.

Возможно, вы также можете использовать неназванное приложение. Here is some documentation on that functionality. Я не уверен, что это сработает для вас в этом случае.

Смежные вопросы