Глядя на то, что я думаю, ваша структура папок, вероятно, выглядит примерно так:
\pathtocfcfolder
.. Sale.cfc
page.cfm
Ошибка на самом деле говорит о том, в чем проблема: нет компонента GetSale
.
С помощью New pathtocfcfolder.sale.GetSale(....)
вы пытаетесь создать экземпляр компонента GetSale
в папке pathtocfcfolder\sale\
.CF не знает, что sale
должен быть компонентом.Вот почему предложение Redtopia сработало.Используя sale()
, вы сказали ColdFusion, что папка для поиска - pathtocfcfolder
и начинается с компонента sale
из-за ()
функций / методов.Тогда CF немедленно звонит GetSale(...)
.
Это не совсем то, что New
должен делать.Он предназначен для создания экземпляров компонентов (или объектов), а не функций / методов этих компонентов.Это может (или, по крайней мере, кажется, что так), но это не значит, что должно.Особенно, если вы собираетесь использовать другие функции внутри вашего объекта.Создайте компонент один раз и используйте его повторно.
Если вы хотите использовать функцию изнутри компонента только один раз, а затем выбросить компонент, вы можете использовать cfinvoke
для вызова этой функции.В противном случае вы захотите создать экземпляр объекта и вызывать функции этого объекта по мере необходимости.
В дополнение к этому, поскольку вы используете ColdFusion 2018, вы можете использовать new component("pathtocfcfolder.Sale")
(вместо new pathtocfcfolder.Sale()
) для создания экземпляра компонента и затем использовать Sale.GetSale(...)
для вызова вашей функции.Синтаксис 2018 делает ваши намерения немного яснее.
Я также добавлю в свое предостережение использование переменных URL
непосредственно в коде.Отправка их в хранимую процедуру решит большую часть проблем SQL-инъекций, но я считаю, что первое, что должна сделать пользовательская переменная, - это пройти хотя бы некоторую базовую очистку и проверку.Люди могут быть очень не приятны для вашего приложения.