Вместо предисловия
Давно хотел опубликовать что-то полезное и вот, наконец, решил рассказать об Ext.Direct. Не видел ни одной более-менее обширной статьи на русском по данной теме, то ли это никому не нужно, то ли одно из двух, как бы то ни было начнем.
Что из себя представляет Ext.Direct?
Ext.Direct существует начиная с версии extjs 3.0. Это пакет который позволяет осуществить более тесное взаимодействие между сервером и клиентом. Вспоминая версию 2.0+ понимаю как же мне не хватало «директа».
Client Side
Возможности Ext.Direct реализованы в классах пакета Ext.data (DirectStore, DirectProxy), соответственно DirectStore в качестве ридера использует JsonReader. Так же существует пакет Ext.direct, в частности класс PollingProvider реализует переодический опрос сервера с заданным интервалом. Ну и Ext.Direct, о нем вскользь ниже и Ext.Direct.Transaction, вспомогательный класс, который напрямую не вызывается.
Начнем со Store. Что это такое объяснять не буду, кому нужно сам поймет, а кто не поймет тому и не нужно.
Самый простой вариант указать в качестве источника данных удаленный метод, указать в качестве параметра directFn

Просто? О да! Первые дни я был просто в экстазе. Однако этот способ не реализует так называемый CRUD (create, read, update, delete) и если вдруг вам нужно не только получать информацию, а так же ее удалять или обновлять, то можно использовать параметр api.
Примерно так:

Далее, удаленную функцию можно вызвать напрямую:

Ммм… Что еще… Вот, например обработка ошибок:

На серверной стороне достаточно вызвать exception
Throw new Exception(‘ололо, ошибка!’);
И она будет перехвачена обработчиком. Ну и вообще можно перехватывать что угодно. В документации рассказано как.
Server Side
На данный момент существует множество реализаций серверной стороны, полный список можно посмотреть тут.
Что касается PHP, есть реализации на чистом PHP, а так же для различных фреймворков. Я же пока что имел опыт работы с реализацией написанной Tommy Maintz. Подробнее можно посмотреть тут.
Пакет состоит из трех классов:
- ExtDirect_API
- ExtDirect_Router
- ExtDirect_CacheProvider
Что нужно сделать чтобы заработало:
- Скачать и распаковать,
- А все, можно использовать.
API – предназначен для работы клиентской части, Router – для работы серверной соответственно. Ну а CacheProvider он и в Африке CacheProvider, используется для того чтобы хранить в КЭШе распарсенные классы PHP, для чего это поймете чуть позже.
api.php

Ну и последнее, api.php включаем таким образом
router.php, наша точка доступа к серверной части Ext.Direct

Теперь непосредственно к пользовательским классам. Любопытная деталь этой реализации, то что удаленные методы во-первых, инкапсулированы в классы, во-вторых, становятся доступными после манипуляций с комментариями к методу, т.е. автор решил что будет правильным парсить PHP классы и вытаскивать из файлов комментарии, (ИМХО) извращенец конечно, ну да кто тут совершенство… Кстати поэтому видимо и кэширование нужно.
File.php

Orders.php

Test.php

Кстати еще одно замечание, количество параметров функции должно соответствовать кол-ву передаваемых параметров, даже если некоторые из них по умолчанию =null
P.S. Можно было бы конечно более подробно описать все, но тогда это займет не один день, а время ограничено (теперь понятно почему нет более обширного обзора на русском). Кому это действительно нужно, стоит только начать и все пойдет как по маслу. Вот и все, спасибо за внимание!
Ссылки:
Документация ExtJs dev.sencha.com/deploy/dev/docs
Введение в Ext.Direct www.sencha.com/blog/2009/05/13/introducing-ext-direct
Спецификация Ext.Direct www.sencha.com/products/js/direct.php
Реализация серверной части ExtJs (список) www.sencha.com/forum/showthread.php?67992-Ext.Direct-Server-side-Stacks
Реализация на PHP by Tommy Maintz www.sencha.com/forum/showthread.php?68186-Alternative-Ext-Direct-PHP-Implementation