Сообщение об ошибке, которое вы опубликовали, указывает на то, что вы неправильно используете функцию Evaluate . Согласно документации, это работает так:
Оценивает одно или несколько строковых выражений, динамически, слева направо. (Результаты оценки слева могут иметь значение в выражении справа.) Возвращает результат оценки самого правого выражения.
Но у вас есть и другие проблемы. Начнем с того, что вы неправильно дублируете логику при перемещении кода в CFC.
В своем рабочем коде вы используете условное выражение:
<cfif left(key,4) eq "UPD_">
Но в вашем CFC у вас есть:
<cfif key eq arguments.structString>
Это должно быть:
<cfif left(key,4) eq arguments.structString>
Далее, вы не используете лучший синтаксис для оценки, и вы, вероятно, вообще не хотите его использовать. Утверждение:
y = evaluate(0,key)
можно переписать как:
y = evaluate(key)
Так как значение ключа равно "UPD_something", это можно переписать как:
y = [variables|arguments|etc].UPD_Something
(Поскольку вы явно не указываете область действия переменной, CF будет пытаться найти переменную в наборе областей в определенном порядке; именно поэтому я использовал синтаксис [a | b | ...])
Вы, вероятно, не имеете это в виду, вы, вероятно, хотите значение из формы. И поскольку имя ключа является динамическим, вы должны получить к нему доступ таким образом (вместо использования evaluate
):
y = variables.instance.form[key]
Я думаю, это может исправить это. Итак, подведем итог:
Замените ваше утверждение <cfif key eq arguments.structString>
на <cfif left(key,4) eq arguments.structString>
(и убедитесь, что значение, которое вы передаете как "structString" включает подчеркивание!)
Замените использование evaluate
на: y = variables.instance.form[key]
Надеюсь, это решит твои проблемы ...
После того, как все заработает, начните думать о именах переменных «Массив» - ужасное имя переменной, потому что это практически зарезервированное слово в CFML. И использование «х» и «у» не является описательным. Проблемы такого типа затрудняют ответ.