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

    В прошлый раз мы рассказали о слоистой архитектуре во фреймворке 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.
    2ГИС
    Главные по городской навигации

    Похожие публикации

    Комментарии 9

      +9
      Респект! Выкладывайте все!
        +1
        Присоединяюсь!
        +3
        Весьма интересные наработки, отличный вклад в сообщество.
          +3
          2GIS молодцы.
          А я к sphinx подключаюсь через SphinxQL, правда использую бету. Это позволяет использовать встроенный DAO.
            +1
            Отличная работа, спасибо. Интересно будет увидеть упомянутый таскменеджер и расширение для AR.
              +1
              радует класс для вашего API :), избавили меня от лишней работы.
                0
                Круто! Ждем ваши таск-менеджер и мультидатабейс актив-рекорд.
                  0
                  Молодцы! В ногу со временем идете!
                    0
                    А расширение для AMQP обновите? с новой версией pecl-amqp не работает.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое