Статьи

Компоненты ColdFusion — Введение

Coldfusion MX (CFC) — это одна из величайших и, вероятно, наиболее ожидаемых функций, которые появятся в Macromedia Coldfusion MX. В своей основной форме CFC — это набор кода и данных, которые хранятся в центральном файле. В прошлом вы, вероятно, создавали файл, который содержал все ваши функции и который вы могли бы просто включить в документ, чтобы все функции были вам доступны. Это очень простое применение ХФУ, но, как мы увидим, это еще не все.

CFC представляют собой попытку Macromedia приблизить ColdFusion к языку объектно-ориентированного программирования (ООП). ColdFusion никоим образом не является языком ООП, но, благодаря отчасти CFC, он может похвастаться некоторыми атрибутами, которые делают языки ООП столь популярными. Например, ColdFusion дает разработчикам возможность расширять фрагмент кода для включения элементов из другого фрагмента кода; это также дает нам возможность трансплантировать и повторно использовать код в различных системах и приложениях.

Итак, как CFC приближают ColdFusion к ООП, и какова остальная часть истории?

ХФУ не ваши обычные страницы включения функции. Когда вы создаете CFC, вы получаете доступ ко многим другим функциям, чем если бы вы создали страницу включения, содержащую набор функций. Что именно эти функции и преимущества? Они включают:

  • Безопасность — у вас есть возможность ограничить доступ к вашим CFC и методам в них, основываясь на пользовательских ролях и настройках вашей настройки CF.
  • Скорость — ХФУ компилируются, поэтому они выполняются быстрее. Помните об этом при создании своих сайтов, так как при первом вызове CFC он компилируется и возвращается результат; Возможно, вы захотите просмотреть свой сайт, прежде чем публиковать его для публики. Также помните, что каждый раз, когда вы вносите и загружаете изменения в свой код, CFC придется перекомпилировать — но вам не о чем беспокоиться, поскольку сервер обрабатывает все это за вас.
  • Расширяемость — ХФУ могут быть расширены, и они могут совместно использовать методы с другими ХФУ, во многом как классы Java и PHP. CFC также можно вызывать извне, используя протокол SOAP или URL-вызовы, что позволяет сделать их доступными для других программистов и других языков.
  • Возможность повторного использования — если вы правильно кодируете свой CFC и помните о последствиях расширяемости, ваш CFC можно передавать и переносить с сервера на сервер и от сценария к сценарию.
  • Локальное повторное использование — после того, как метод CFC вызывается на странице, его обычно можно повторно использовать на всей странице. Есть несколько исключений из этого практического правила, но возможность повторного использования кода означает, что вам не нужно вызывать функцию несколько раз на одной странице.
  • Документация — CFC могут генерировать свою собственную документацию, используя атрибуты подсказок в тегах cfcomponent и cffunction. Чтобы увидеть эту функциональность в действии, просто откройте CFC, например, http://www.example.com/myCFC.cfc , в веб-браузере (обратите внимание, что вам придется войти в систему с помощью RDS или администратора, чтобы увидеть страница). Сервер создаст страницу, которая документирует myCFC.
  • Перспективное мышление — ХФУ представляют будущее для ColdFusion; По моему мнению, мы должны принять их сейчас и довести их до предела, чтобы приятные люди из Macromedia продолжали их улучшать.

В старые времена, предшествовавшие ColdFusion MX, вы могли создавать собственные теги или пользовательские функции (UDF) или находить какой-то другой способ разработки повторно используемого кода. ХФУ позволяют вам достичь этой цели, предоставляя перечисленные здесь дополнительные преимущества.

терминология

Прежде чем мы перейдем к простому CFC, нам нужно понять некоторые ключевые термины.

Во-первых, CFC называется Component или ColdFusion Component, и вы можете думать о нем как о контейнере. Теперь пустой контейнер не имеет значения, пока вы его не заполните. Мы заполняем компонент методами, которые определены тегом <cffunction> .

После того, как у нас есть компонент и он заполнен методами, мы можем вызывать определенные методы, которые можно найти в компоненте, используя <cfinvoke> .

Простой ХФУ

Теперь, когда у вас есть общий обзор потока и языка, давайте применим эти знания, чтобы вы могли действительно понять концепцию ХФУ.

Первое, что нам нужно сделать, это создать новый файл и сохранить его с расширением .cfc. Назовите этот файл users.cfc; мы будем использовать его для хранения всех наших пользовательских методов. Я также рекомендую хранить все ваши CFC в центральной папке, называемой компонентами, cfc — любое имя по вашему вкусу.

Теперь откройте этот файл в вашем любимом текстовом редакторе и введите следующее:

 <cfcomponent displayname="Users CFC" hint="This is the CFC for my user stuff">  <!--- This function gets all the users and their  data from the DB --->  <cffunction name="get_all_users" hint="Gets all users in the database" returntype="query">    <cfquery name="get_em" datasource=#APPLICATION.db_source#>      select * from from users    </cfquery>    <cfreturn get_em>  </cffunction>  </cfcomponent> 

Сохраните свой файл, чтобы не потерять работу, и давайте разберем код построчно.

<cfcomponent displayname="user cfc" hint="This is the CFC for my user stuff">

Эта первая строка сообщает серверу CF, что это компонент Coldfusion. Отображаемое имя — это имя, которое отображается при создании документации; hint содержит описательный текст о ХФУ в целом.

   <!--- This function gets all the users and their  data from the DB --->  <cffunction name="get_all_users" hint="Gets all users in the database" returntype="query" output="false"> 

Далее мы видим комментарий, который описывает, что делает CFC. После комментария есть тег cffunction с name атрибута, hint , returntype и output setting . name представляет имя вызываемой функции. hint представляет описательный текст об этой функции. returntype сообщает CF-серверу, какие данные будут возвращаться этой функцией. И наконец, output сообщает серверу, действует ли эта функция так, как если бы она была в <cfoutput> или в <cfsilent> . По сути, мы используем параметр output чтобы определить, хотим ли мы, чтобы функция обрабатывала теги cfoutput в cffunction ( output="true" ), или мы хотим, чтобы эти теги были подавлены ( output="false" ).

У вас есть несколько вариантов для returntype , поэтому не забудьте выбрать тот, который соответствует вашей функции. Эти типы довольно очевидны:

  • Любые
  • массив
  • двоичный
  • логический
  • числовой
  • Дата
  • Guid
  • запрос
  • строка
  • Struct
  • UUID
  • VARIABLENAME
  • пустота

Помимо всего этого, мы также можем определить атрибуты access и role чтобы помочь контролировать, кто имеет доступ к функции и ее выводу. Атрибут cflogin работает в унисон с тегом cflogin . Мы можем определить roles и т. Д. С cflogin тега cflogin ; Затем эти роли определяют конкретные методы, которые пользователь может и не может использовать. Этой теме мы могли бы посвятить целую статью, но, вкратце, роли отлично подходят для обеспечения безопасности, когда ваше приложение использует встроенную аутентификацию ColdFusion. Если вы хотите узнать больше об этих темах, ознакомьтесь с документацией по ColdFusion и веб-сайтом Macromedia .

     <cfquery name="get_em" datasource=#APPLICATION.db_source#>      select * from from users    </cfquery> 

Следующий фрагмент кода представляет фактический запрос, который мы запустим для базы данных. Вы заметите, что я использовал переменную #APPLICATION.db_source# вместо именования конкретного источника данных. Это персональный код, поэтому не стесняйтесь либо сохранить это значение в своем application.cfml с cfset тега cfset , либо указать имя источника данных в том виде, как оно установлено в CF Administrator.

     <cfreturn get_em> 

Далее мы должны вернуть запрос на страницу, которая вызвала эту функцию. Поскольку мы хотим вернуть весь запрос на вызывающую страницу и поскольку мы устанавливаем returntype="query" , мы вставляем имя запроса в том виде, в котором оно отображается в атрибуте name для тега cfquery .

cfreturn тега cfreturn что он будет возвращать только одно значение за раз. Поэтому, если вам нужно или нужно вернуть несколько значений, вы должны поместить их в массив или структуру, а затем вернуть этот массив или структуру.

   </cffunction>  </cfcomponent> 

Наконец, мы закрываем теги функции и компонента.

Используйте и называйте свой CFC

Так что у вас есть это! Вы только что создали свой первый компонент и функцию. Но теперь вам нужно знать, как использовать и назвать его. Для этого нам нужно создать новую страницу и сохранить ее как users.cfml или users.cfm. Как только эта страница открыта, сохранена и готова к работе, вставьте следующую строку вверху страницы перед любым HTML-кодом:

 <cfinvoke component="cfc.users" method="get_all_users" returnvariable="u"></cfinvoke> 

Приведенная выше строка является нашим тегом cfinvoke , который используется для вызова метода внутри компонента. Разбить это довольно просто. Компонент component="cfc.users" сообщает серверу, какой компонент вы хотите получить и где его найти. Поскольку я сохранял свой CFC в папке с именем «cfc», мне приходилось использовать точечную запись, чтобы сообщить серверу местоположение и какой файл я хотел. Если бы вы назвали свой каталог «компоненты», ваш код будет выглядеть так: component="components.users" . Если бы у вас была более сложная структура каталогов, такая как / components / users / general /, ваш код был бы похож на это: component="compontents.users.general.users"

Следующая часть, method="get_all_users" , сообщает серверу, какой метод мы хотим использовать. Наконец, нам нужно указать, как будут возвращаться возвращаемые данные. Для этого случая мы выбрали простое «u», как в пользователе, которое мы указали с помощью returnvariable="u" .

Далее мы хотим создать следующий бит кода HTML и ColdFusion для вывода наших данных:

 <table width="100%"  border="1" cellspacing="0" cellpadding="3">  <tr>    <td>Users Name</td>    <td>Users Login</td>    <td>Users Email</td>    <td>Users Status</td>  </tr>  <cfoutput query="u">  <tr>    <td>#name#</td>    <td>#login#</td>    <td>#email#</td>    <td>#status#</td>  </tr>  </cfoutput>  </table> 

Это выведет симпатичную небольшую таблицу со строкой заголовков для каждого столбца в таблице и новую строку для каждой соответствующей строки / пользователя в таблице.

Вы заметите, что мы использовали <cfoutput query="u"> . Это позволяет нам быстро выводить данные в запросе без использования циклов. Сервер CF будет знать, что ему нужно выполнить тег cfoutput и содержащийся в нем код, пока запрос не достигнет конца вывода.

Так что у вас есть это! Вы успешно создали компонент и функцию, вызвали этот метод на отдельной странице и вывели данные.

Я надеюсь, что эта статья помогла вам лучше понять ХФУ и вызвала у вас интерес к получению дополнительной информации. Это ни в коем случае не полный обзор ХФУ — есть много тем, на которые намекнули, но не раскрыли здесь. Я предлагаю вам прочитать документацию, найденную на веб-сайте Macromedia или на вашем сервере, и проверить Macromedia Coldfusion DevNet для некоторого отличного CF и