railo application.cfc this.mappings не работает
Я использую последнюю версию Railo и пытаюсь заставить работать сопоставления для каждого приложения. это то, что я делаю:
<cfcomponent name="MyApp">
<cfset THIS.Name = "MyApp">
<cfset THIS.Mappings["/myapp"] = ExpandPath(".")>
</cfcomponent>
поэтому я пытаюсь получить доступ к компонентам в этой папке приложения через сопоставления myapp.*, а не к rootapp.myapp.* (из того, что я понимаю, тогда должна работать эта установка компонента.
тем не менее, мои компоненты не могут быть доступны с помощью этого сопоставления, и когда я сделаю cfdump для переменной приложения в моем коде, это покажет, что "applicationname" установлено в "MyApp", но ничего не показывает для отображений.
Railo не поддерживает эти отображения, или я делаю что-то не так?
РЕДАКТИРОВАТЬ:
это точная ошибка, которую я получаю:
invalid component definition, can't find myapp.data.MyObject
myapp
отображение должно быть сделано, и MyObject
существует. вот моя структура:
/rootfolder/myapp/Application.cfc
/rootfolder/myapp/data/MyObject.cfc
/rootfolder/myapp/pages/MyPage.cfm
короче говоря, "MyPage.cfm" использует сопоставление для легкого доступа к компоненту "MyObject". Application.cfc должен быть загружен, так как процессор cfml должен начать перемещаться вверх по каталогам, пока не найдет их.
2 ответа
С вашим синтаксисом все в порядке, я только что сделал то же самое для приложения в глубине дерева каталогов, и он работает нормально.
тем не менее, мои компоненты не могут быть доступны с помощью этого сопоставления,
Что такое точная ошибка? msgstr "неверное определение компонента, не могу найти myapp.xyz"?
Ваши cfm и cfc находятся в одном каталоге? (это в основном то, что вы пытаетесь сделать)
и когда я сделаю cfdump для переменной приложения в моем коде, это покажет, что "applicationname" установлено в "MyApp", но ничего не показывает для отображений.
Вы не увидите эту информацию, сбросив область приложения. Единственный вариант - использовать Application.cfc как обычно cfc.
<cfset app = CreateObject("component", "application") />
<cfdump var="#app#">
РЕДАКТИРОВАТЬ. У вас есть два решения здесь.
Определите отображение следующим образом, поэтому путь к Application.cfc будет рассчитан:
<cfset this.mappings["/myapp2"] = getDirectoryFromPath(getCurrentTemplatePath())>
Или измените путь компонента следующим образом:
<cfset MyObject = CreateObject("component", "myapp.data.MyObject") />
Проблема в различиях путей, возвращаемых ExpandPath
а также getCurrentTemplatePath()
,
Обновление: как отметил Сергей, синтаксис действителен, но чистый эффект тот же.
Попробуйте использовать этот синтаксис
<cfcomponent>
<cfset THIS.Name = "MyApp">
<cfset THIS.mappings = { "/myapp" = ExpandPath(".") } >
</cfcomponent>