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