Может ли остальной компонент получить доступ к области приложения?

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

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

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

Element FOO is undefined in APPLICATION.

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

Variable APPLICATION is undefined.

На данный момент вопрос довольно спорный - реализация 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>

1 ответ

Решение

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

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

Где находится cfc относительно вашего файла Application.cfc (в пути)? Помните, что ColdFusion будет искать файл Application.cfc в той же папке вызываемого шаблона и, если он не найден, начнет поиск дерева каталогов для него. Если ваш cfc не находится в иерархии файла Application.cfc, то он не будет частью этого приложения, как видит ColdFusion. Вот еще немного информации об этой функции от Чарли Арехарта.

Вы также можете потенциально использовать безымянное приложение. Вот некоторая документация по этой функциональности. Я не уверен, что это сработает для вас в этом случае.

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