Pull to refresh
91.49
2ГИС
Главные по городской навигации

Open Source-расширения для yii от команд 2ГИС

Reading time 3 min
Views 19K
В прошлый раз мы рассказали о слоистой архитектуре во фреймворке yii, а сейчас хотим поделиться кодом.

В своей работе мы активно используем open source-решения и поэтому решили поделиться собственными разработками, которые могут быть полезны сообществу. Сегодня это расширения для, наверное, лучшего в мире PHP-фреймворка yii:
  • DGSphinxSearch
  • AMQP(RabbitMQ)
  • MQLogRouter
  • DGPinbaLogRoute
  • DGApiClient
Рассмотрим эти расширения по порядку.



DGSphinxSearch


Sphinx — это высокопроизводительная система полнотекстового поиска, которую вы наверняка хорошо знаете. Расширение позволяет реализовать как процедурный, так и объекто-ориентированный подход к формированию запросов и работе с данными. Расширение полностью интегрировано в yii и позволяет мониторить свою работу с помощью стандартных средств фреймворка. Для работы на серверах, где не установлено C++-расширение для PHP, поддерживается режим работы через скриптовую бибилиотеку.

К примеру, попробуем найти не более 30 записей среди пользователей по имени Василий:

$userlist = Yii::App()->sphinx->select('name')->from(‘users’)->where(‘Василий’)->limit(0, 30)->search();

Стало ощутимо компактней, чем при использовании оригинальной библиотеки для Sphinx.

Подробности — на странице расширения на сайте yii: www.yiiframework.com/extension/dgsphinxsearch

AMQP


RabbitMQ — быстрый сервер обмена сообщениями, написанный на отказоустойчивом языке Erlang.

Расширение упрощает работу не только с RabbitMQ, но и с любыми MQ-серверами, поддерживающими протокол AMQP, и позволяет отправлять и получать сообщения c сервера, а также поддерживает отладочный режим работы, когда непосредственного соединения с сервером не происходит.

Чтобы отправить сообщение в обменник «outbox», делаем:

Yii::App()->rabbitMQ->exchange('outbox')->publish('Привет!', '');

Чтобы получить сообщение из очереди «inbox», которая подписана на обменник «outbox», делаем:

Yii::App()->rabbitMQ->queue('inbox')->get();


Страничка расширения: www.yiiframework.com/extension/amqp

MQLogRouter


В yii встроена весьма удобная система логирования и профилирования. В базовой поставке она позволяет сохранять логи в файловую систему, в базу или выводить в браузер. Мы добавили специальный LogRoute, который направляет логи в MQ-сервер.

Удобство решения проявляется, когда есть потребность анализировать взаимодействие нескольких отдельных приложений, взаимодействующих через REST- или SOAP-интерфейс и ведущих логи на разных серверах.

www.yiiframework.com/extension/cmqlogroute — инструкция по подключению довольно проста и сводится к настройке конфига приложения.

DGPinbaLogRoute


Pinba — это средство мониторинга серверов и профилирования кода. Благодаря тому, что пакеты на сервер отправляются асинхронно, передача не влияет на производительность вашего приложения. Pinba сама собирает суммарную статистику по выполнению каждого скрипта и позволяет использовать её в реальном времени.

Для отправки логов в Pinba достаточно подключить DGPinbaLogRoute в качестве yii-логера и вызывать привычные для yii:

Yii::beginProfile();   
…..;  
Yii::endProfile();  

Подробнее здесь: www.yiiframework.com/extension/dgpinbalogroute

Следующий шаг мы видим в визуализации собранной статистики и планируем поделиться соответствующим модулем.

DGApiClient


APIClient — это PHP-обёртка для нашего продукта API 2ГИС. Сам продукт позволяет приложениям получать справочные данные 2ГИС по более чем 1 млн организаций и создавать на их базе local search-сервисы или использовать их на уже существующих городских порталах, тематических сайтах и других проектах.

Расширение облегчает задачи по интеграции и позволяет разработчику абстрагироваться от реализации REST-запросов и работать с API сразу из PHP-кода. Рассмотрим на примере, как этим пользоваться.

К примеру, тут мы получаем список из 10 геообъектов в 100 метрах от точки 82.901886,54.991984 в xml-формате:

$list = Yii::App()->apiClient->geoSearch(array(
    'q'         => '82.901886,54.991984',
    'radius'    => 100,
    'limit'     => 10,
), 'xml');

А теперь мы ищем 10 компаний по запросу «пиво» в окрестностях Арбата в Москве:

$list = Yii::App()->apiClient->search(array(
   'where'        => 'Москва Арбат',
   'what'        => 'пиво',
   'limit'     => 10,
), 'xml');

Если мы захотим получить ответ в виде объектов, достаточно заменить ‘xml’ на ‘object’.
Полный список методов указан в документации к API на api.2gis.ru

* * *

Полный список расширений для yii, которые выкладывают наши команды разработки, можно найти на сайте фреймворка по тегу 2GIS: www.yiiframework.com/extensions/?tag=2GIS

Конечно, это не все, чем нам хотелось бы поделиться. В дальнейшем мы планируем выложить расширение для ActiveRecord, которое умеет работать с несколькими серверами баз данных одновременно, и таскменеджер, который позволяет запускать различные задачи, контролируя их очередность и количество. Если описанные приложения окажутся востребованными, мы продолжим делать свой маленький вклад в большое и важное движение Open Source.
Tags:
Hubs:
+75
Comments 9
Comments Comments 9

Articles

Information

Website
2gis.ru
Registered
Founded
Employees
1,001–5,000 employees
Location
Россия