XML-RPC и Yii фреймворк

Владимир | | PHP, Web разработка, Yii.

yii xml rpc

Последнее время фреймворк Yii набирает популярность. В основном благодаря интенсивному развитию и неплохому набору встроенных библиотек. Поэтому для меня было, немного удивительно, что в дистрибутиве не обнаружилось библиотеки для работы с XML-RPC.

Но, как оказалось, этот недостаток несложно исправить. Рассмотрим небольшой пример, получение нескольких записей из блога на движке WordPress с помощью XML-RPC запроса.

Шаг 1. Загружаем библиотеку для работы с XML-RPC.

Для этого примера я выбрал Incutio XML-RPC Library, главным образом потому, что её использует WP. Но, в принципе, это не важно. Возможно, вам больше понравится библиотека из ZF.

Загружаем библиотеку и сохраняем её в папке protected/vendors фреймворка (эту папку нужно создать). В данном случае библиотека состоит всего из одного файла IXR_Library.php.

Примечание. Учитывая, что библиотека маленькая, можно было её сохранить и в папке, protected/extensions, но, насколько я понял из официального руководства, данная папка предназначена для собственных расширений. Поэтому не будем путать их со сторонними разработками. Хотя разницы в подключении практически никакой.

Шаг 2. Подключаем библиотеку к фреймворку.

Тут есть нюансы. Если бы в нашей библиотеке каждый класс был объявлен в отдельном файле, и имя этого класса совпадало бы с именем файла, то можно было бы обойтись только методом Yii::import. Но в данном случае это не так, потому подключение выполняется следующим образом.

Yii::import('application.vendors.*');
require_once ('IXR_Library.php');

Метод import позволяет изменить относительный путь подключения PHP скриптов (используется функция set_include_path). application.vendors.* означает, что будут подключены все файлы, находящиеся в папке protected/vendors. Но, по-умолчанию, само подключение будет выполнено только при первом использовании классов.

Поэтому нам нужно сразу после вызова import использовать require_once. Иначе фреймворк будет пытаться найти файлы для каждого из классов библиотеки, а они все находятся в IXR_Library.php.

Если бы мы поместили библиотеку в папку protected/extensions, то изменился бы только путь подключения.

Yii::import('ext.*');
require_once ('IXR_Library.php');

Шаг 3. Использование.

Использовать библиотеку можно где угодно, в контроллерах, моделях, командах консоли, виджетах и т.п. Главное, не забыть её подключить.

Для нашего примера код будет такой.

$client = new IXR_Client('http://my_cool_wp_blog.com/xmlrpc.php');

$requestData[0] = 0; //id блога
$requestData[1] = 'user_name']; //имя пользователя
$requestData[2] = 'user_pass'; //пароль
$requestData[3] = 5; // количество записей, которые нужно получить

if (!$client->query('metaWeblog.getRecentPosts', $requestData)) {
	throw new Exception('Get posts error: '.$client->getErrorMessage());
}

$data = $client->getResponse();

В данном случае я использовал MetaWeblog API. В конструкторе объекта IXR_Client указываем адрес XML-RPC сервера (для блогов на WP это файл xmlrpc.php, который находится в корне блога).

Затем формируем массив с параметрами и отправляем запрос с помощью метода query. В его первом параметре указываем имя функции, в данном случае это metaWeblog.getRecentPosts, которая возвращает список последних постов, а во втором – массив с параметрами.

Метод getResponse возвращает массив с результатами запроса, а getErrorMessage – описания ошибок, если они были.

Как видите, фреймворк позволяет подключить практически любую библиотеку и использовать её так, как описано в документации.

Если есть вопросы, советы или замечания, пишите, буду рад обсудить 😉

Постовой

Сделали ремонт, но замена мебели выходит за рамки бюджета? Вам поможет замена обивки мягкой мебели. После этой процедуры на мебель будет приятно смотреть.