Статьи

Новые функции PHP в Flash Builder 4. Часть 1. Обзор возможностей, ориентированных на данные

PHP и Flash Platform не новички. когда Flash Player 4 добавил функции динамических данных через строки запросов, PHP был там. Когда Flash Player 5 добавил поддержку XML, PHP был там. Когда Flash Player 6 добавил поддержку Flash Remoting и AMF, появились новые проекты PHP, такие как AMFPHP . Вместе с Flash Player 7 появилась инфраструктура приложений Flex. Flex 3 принял поддержку PHP близко к сердцу благодаря встроенному мастеру данных в Flex Builder 3, а также обновлению и обновлению AMFPHP в сотрудничестве с Zend , выпускающим Zend AMF.

Теперь мы находимся на пороге самой последней и лучшей главы в этой связи с бета-сборками Flex 4 и связанными инструментами, доступными в Adobe Labs., В этой серии статей, состоящей из трех частей, мы рассмотрим, что разработчик PHP может ожидать от некоторых более ориентированных на данные функций, предоставляемых этими последними выпусками. В первой части мы рассмотрим изменение бренда и перейдем к обзору разработки, ориентированной на данные. Во второй и третьей частях будет рассказано о роли Zend AMF, а также о том, как поддержка PHP в Flash Builder 4 расширяет границы с такими функциями, как неявное разбиение на страницы и управление данными.

Примечание редактора. Эта статья предназначена для ознакомления с PHP-функциями Flex 4 и Flash Builder 4, которые в настоящее время находятся в бета-версии и доступны в Adobe Labs. Эти продукты еще не завершены, и их реализация может быть изменена. Этот обзор не предназначен в качестве пошагового руководства.

 

Изменения в брендинге

Изначально Flex Builder появился на основе Flex 1.5 и изначально был основан на Dreamweaver. Flex Builder 2 увидел переход к инструменту на основе Eclipse, который действительно охватил движение многих поставщиков (включая Zend) в общую основу IDE. Flex Builder 3 расширил набор инструментов, добавив поддержку чистых проектов ActionScript — проектов, которые не использовали Flex Framework. Разработчики Flash могут использовать Flash Professional для создания своих активов и содержимого, а затем использовать Flex Builder 3 для кодирования класса документа и других вспомогательных классов, но никогда не трогать Flex Framework.

Более того, целые приложения могут быть написаны с использованием только проектов ActionScript, которые никогда не затрагивали Flash Professional или Flex Framework.

Для большей совместимости с этим использованием среды IDE для создания всех типов содержимого на основе Flash, как тех, которые используют Flex Framework, так и тех, кто его не использует, Flex Builder теперь называется Flash Builder 4. Flash Builder по-прежнему построен на Eclipse. все еще доступен как автономный или подключаемый модуль и работает с Zend Studio. Flex SDK с открытым исходным кодом, в том числе Flex Framework, по-прежнему называется Flex, а Flash Builder по-прежнему поддерживает только проект ActionScript. Flash Builder также по-прежнему имеет отличную поддержку PHP — фактически он стал более надежным, чем когда-либо прежде.

Начало работы с Flash Builder

После того, как вы загрузили, установили и запустили Flash Builder, первое, что вам нужно сделать, — это создать новый проект. Проходя по мастеру создания нового проекта, вы заметите, что тип проекта PHP все еще там. В качестве ссылки, вот пример настроек моего проекта, указывающих на локальную установку MAMP (http://www.mamp.info).

Как только ваш проект будет создан, вы, вероятно, захотите подключиться к некоторым данным. В Flex 3 у вас была возможность использовать XML или любой другой символьный формат по HTTP. Вы также можете подключиться к двоичному протоколу через HTTP в форме AMF, используя Zend AMF. Хотя вы все еще можете это сделать, есть несколько новых разделов MXML, предназначенных для устранения неоднозначностей разметки.

Например, вы могли объявить тег HTTPService прямо перед тегом DataGrid, но один предназначен для доступа к данным, а другой — компонент пользовательского интерфейса. Чтобы устранить этот тип неоднозначности, теперь существует новый раздел объявлений, определенный в MXML. Использование элементов HTTPService, а также других служебных элементов и невидимых свойств теперь выглядит примерно так, как показано в следующем примере кода.

<?php include "database.php" ?>


<?php
$sql = "SELECT * FROM contacts";
$result = mysql_query( $sql );
?>


<rolodex>


<?php while( ( $row = mysql_fetch_array( $result ) ) != false ) { ?>


<contact id="<?php echo $row["id"] ?>">
<firstname><?php echo $row["firstname"] ?></firstname>
<lastname><?php echo $row["lastname"] ?></lastname>
<email><?php echo $row["email"] ?></email>
<mobile><?php echo $row["mobile"] ?></mobile>
</contact>


<?php } ?>


</rolodex>

<?xml version="1.0" encoding="utf-8"?>
<s:Application
pageTitle="Getting Started"
creationComplete="svc.send()"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo">


<fx:Declarations>
<mx:HTTPService
id="svc"
url="/contacts/inline/getcontacts.php"/>
</fx:Declarations>


<mx:DataGrid
left="10"
right="10"
top="10"
dataProvider="{svc.lastResult.rolodex.contact}"/>


</s:Application>

Архитектурно проблема с этим примером кода состоит в том, что результаты XML связаны непосредственно с пользовательским интерфейсом. Это создает хрупкую зависимость. Если ваша модель (XML) изменяется, то все части пользовательского интерфейса (UI), которые к ней относятся, также должны быть обновлены. Более чистый способ сделать это — поместить полученные данные, XML или другие, в свою собственную модель данных. Это чаще всего принимает форму массива объектов значений внутри коллекции, где коллекция затем привязывается к пользовательскому интерфейсу.

Такое отделение доступа к данным от модели данных, от пользовательского интерфейса изолирует вас от любых изменений базовой структуры данных. Если XML изменяется, единственный код, к которому нужно прикоснуться, — это сопоставление с коллекцией, в то время как пользовательский интерфейс остается без изменений. Это прекрасное разделение, но впереди еще много работы. Чтобы устранить этот пробел, Flash Builder 4 добавляет новый набор функций разработки, ориентированных на данные (DCD).

Представляем Data-ориентированную разработку

Создав новый проект Flash Builder, вы увидите новую панель в нижней части среды IDE под названием «Данные / службы». По умолчанию, когда службы еще не настроены, внутри этой панели вы найдете ссылку «Подключиться к данным / службе». Если вы перейдете по этой ссылке, если вы настроили свой проект для PHP, вы увидите три разных варианта.

HTTPService такой же, как вы могли подумать — используйте HTTP-запросы для получения данных XML. Это именно то, что делает предыдущий код, но без этого разделения модель / представление. Параметр WebService является расширением подхода HTTPService, но предназначен для использования с веб-службами и соответствующими стандартами, такими как SOAP. Мы еще поговорим о опции PHP позже, но сейчас просто знайте, что это сокращение от Zend AMF. А пока давайте продолжим с опцией HTTPService, используя предыдущий код PHP.
В следующем диалоговом окне вам будет предложено указать имя службы и указать различные операции, которые вы хотите выполнить. В предыдущем коде PHP мы получили все записи в базе данных и вернули их в виде данных XML. Мы можем добавить эту конечную точку в качестве операции, присвоить ей любое имя и передать все необходимые аргументы (в данном случае ни одного). Вы можете повторить этот процесс для различных конечных точек, относящихся к одним и тем же данным (например, операция «createItem» для создания новой записи).

Когда вы заполните поля и нажмете кнопку «Готово», вам будет предложено вспомнить напоминание, чтобы установить тип возвращаемых данных. Это часть коллекции, о которой я упоминал ранее. Чтобы Flash Builder создал типы данных для записей, с которыми мы имеем дело для этой службы, щелкните правой кнопкой мыши метод, который вы хотите использовать, и выберите «Настроить тип возвращаемых данных». Поскольку мы еще не создали какие-либо типы данных службы, мы захотим создать новый тип для наших данных XML.

После того, как мы настроили тип данных для этой конечной точки службы, вероятно, что другие конечные точки для этой службы будут использовать тот же тип данных. Если вы выберете другую конечную точку и снова запустите мастер, вы увидите тип данных за последний раз, доступный вам, в существующем списке типов данных. В дальнейшем Flash Builder потребуются некоторые примеры данных, на которых он может основываться в качестве типа возвращаемых данных.

Если для получения образца необходимы какие-либо параметры, вы можете указать эти аргументы, введя значения параметров. Или, возможно, у вас уже есть часть возврата XML, и вы просто хотите вырезать и вставить в Flash Builder. В этом случае я расскажу Flash Builder, где взять пример данных, указав полный URL-адрес для конечной точки.

После обработки результатов пришло время сообщить Flash Builder, какой узел XML представляет тип данных. По умолчанию для приведенного выше кода является корневой узел XML «rolodex», который не является узлом, который фактически представляет тип данных. Вы можете выбрать интересующий вас узел из выпадающего списка и проверить значения узла — в данном случае это контактный узел. После завершения работы мастера обновится панель «Данные / службы», чтобы показать нашу конечную точку, настроенную с соответствующим типом возвращаемых данных.

Отсюда мы можем просто перетащить имя метода с панели Data / Services на DataGrid или аналогичный элемент управления данными. Для вас будет создана привязка данных, а также сами столбцы на основе только что созданного типа данных. Также есть приятный новый диалог для управления столбцами DataGrid, который я предлагаю вам проверить в какой-то момент. Все, что нам нужно сделать сейчас, — это запустить приложение и увидеть возможности разработки, ориентированной на данные, в действии.

(Нажмите на картинку выше для полноразмерного изображения)

 

Если вы внимательно наблюдали, то произошло то, что Flash Builder создал подходящую модель данных для вашего приложения. Изменилась ли конечная точка вашего сервиса? Изменилось ли форматирование результатов? Просто запустите мастер еще раз, чтобы обновить отношения. Ваш пользовательский интерфейс теперь привязан к модели сервиса и надежно изолирован от изменений сервиса. Это всего лишь ядро ​​новых функций разработки, ориентированных на данные, в Flash Builder 4, но это гораздо сложнее. Во второй и третьей частях этой серии статей мы более подробно рассмотрим Zend AMF и такие функции, как неявное разбиение на страницы и управление данными.