railo application.cfc this.mappings не работает - PullRequest
3 голосов
/ 29 июля 2011

Я использую последнюю версию Railo и пытаюсь заставить работать сопоставления для каждого приложения.вот что я делаю:

<cfcomponent name="MyApp">
    <cfset THIS.Name = "MyApp">
    <cfset THIS.Mappings["/myapp"] = ExpandPath(".")>
</cfcomponent>

поэтому я пытаюсь получить доступ к компонентам в этой папке приложения через сопоставления myapp. * вместо того, чтобы обращаться к rootapp.myapp. * (из чегоя понимаю, что эта установка компонентов должна работать.

однако мои компоненты не могут получить доступ к этому отображению, и когда я делаю cfdump для переменной приложения в моем коде, это покажет, что «имя приложения»установлено значение «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 ]

2 голосов
/ 29 июля 2011

С вашим синтаксисом все в порядке, я только что сделал то же самое для приложения в глубине дерева каталогов, и он отлично работает.

однако мои компоненты не могут получить доступ с помощью этого сопоставления,

Что такое точная ошибка?"Неверное определение компонента, не удается найти myapp.xyz"?

Ваши cfm и cfc находятся в одном каталоге?(это в основном то, что вы пытаетесь сделать)

, и когда я делаю cfdump для переменной приложения в моем коде, это покажет, что для "applicationname" установлено значение "MyApp", ноничего не отображается для сопоставлений.

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

<cfset app = CreateObject("component",  "application") />
<cfdump var="#app#">

EDIT.У вас есть два решения:

Определите сопоставление следующим образом, поэтому путь к Application.cfc будет рассчитан:

<cfset this.mappings["/myapp2"] = getDirectoryFromPath(getCurrentTemplatePath())>

Или измените путь компонента следующим образом:

<cfset MyObject = CreateObject("component",  "myapp.data.MyObject") />

Проблема в различиях путей, возвращаемых ExpandPath и getCurrentTemplatePath().

2 голосов
/ 29 июля 2011

Обновление: Как отметил Сергей, синтаксис действителен, но общий эффект тот же.

Попробуйте использовать этот синтаксис

<cfcomponent>
    <cfset THIS.Name = "MyApp">
    <cfset THIS.mappings = { "/myapp" = ExpandPath(".") } >
</cfcomponent>
...