Последнее время фреймворк 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 – описания ошибок, если они были.
Как видите, фреймворк позволяет подключить практически любую библиотеку и использовать её так, как описано в документации.
Если есть вопросы, советы или замечания, пишите, буду рад обсудить 😉
Постовой
Сделали ремонт, но замена мебели выходит за рамки бюджета? Вам поможет замена обивки мягкой мебели. После этой процедуры на мебель будет приятно смотреть.


