2GISチームのyiiのオープンソース拡張機能

前回、yiiフレームワークの階層化アーキテクチャについて話しましたが、今はコードを共有したいと考えています。



私たちの仕事では、オープンソースソリューションを積極的に使用しているため、コミュニティに役立つ可能性のある独自の開発を共有することにしました。 現在、これらはおそらく世界最高のyii PHPフレームワークの拡張機能です。

これらの拡張機能を順番に検討してください。







DGSphinxSearch



Sphinxは高性能な全文検索エンジンであり、おそらくご存知でしょう。 この拡張機能を使用すると、クエリを生成してデータを操作するための手続き型アプローチとオブジェクト指向アプローチの両方を実装できます。 拡張機能はyiiに完全に統合されており、標準のフレームワークツールを使用して作業を監視できます。 C ++がインストールされていないサーバー(PHPの拡張機能)で動作するために、スクリプトライブラリを介した操作モードがサポートされています。



たとえば、Vasilyという名前のユーザーから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だけでなくAMQPプロトコルをサポートするMQサーバーとの連携を簡素化し、サーバーとのメッセージの送受信を可能にし、サーバーへの直接接続がない場合のデバッグモードもサポートします。



メッセージを送信トレイエクスチェンジャーに送信するには、次のようにします。



 Yii::App()->rabbitMQ->exchange('outbox')->publish('!', '');
      
      





送信トレイエクスチェンジャーにサブスクライブされている受信トレイキューからメッセージを受信するには、次のようにします。



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







拡張ページ: www.yiiframework.com/extension/amqp



MQLogRouter



Yiiには非常に便利なロギングおよびプロファイリングシステムが組み込まれています。 基本的な配信では、ログをファイルシステム、データベース、またはブラウザへの出力に保存できます。 ログをMQサーバーに送信する特別なLogRouteを追加しました。



ソリューションの利便性は、RESTまたはSOAPインターフェースを介して相互作用し、異なるサーバーでログを維持するいくつかの個別のアプリケーションの相互作用を分析する必要がある場合に現れます。



www.yiiframework.com/extension/cmqlogroute-接続手順は非常に簡単で、アプリケーション構成のセットアップになります。



DGPinbaLogRoute



Pinbaは、サーバー監視およびコードプロファイリングツールです。 パケットが非同期でサーバーに送信されるため、送信はアプリケーションのパフォーマンスに影響しません。 ピンバ自体は、各スクリプトの実行に関する要約統計を収集し、リアルタイムで使用できるようにします。



ログをPinbaに送信するには、DGPinbaLogRouteをyiiロガーとして接続し、yiiの通常のログを呼び出します。



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





詳細はこちら: www.yiiframework.com/extension/dgpinbalogroute



収集された統計の視覚化で見る次のステップは、適切なモジュールを共有することです。



DGApiClient



APIClientは、 API 2GIS製品のPHPラッパーです。 この製品自体により、アプリケーションは100万を超える組織の2GIS参照データを受け取り、それらに基づいてローカル検索サービスを作成したり、既存の都市ポータル、テーマサイト、その他のプロジェクトでそれらを使用したりできます。



この拡張機能により、統合タスクが容易になり、開発者はRESTリクエストの実装から抽象化し、PHPコードから直接APIを操作できます。 これを使用する方法の例を見てみましょう。



たとえば、ここでは、ポイント82.901886,54.991984から100メートル離れた10個の地理オブジェクトのリストを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.2gis.ruの APIドキュメントに示されています



* * *



開発チームが投稿するyiiの拡張機能の完全なリストは、2GISタグWebサイト( www.yiiframework.com/extensions/?tag=2GIS)にあります。



もちろん、これは私たちが共有したいと思うすべてではありません。 将来的には、複数のデータベースサーバーで同時に動作できるActiveRecordの拡張機能と、さまざまなタスクを実行してシーケンスと番号を制御できるタスクマネージャーを配置する予定です。 記載されているアプリケーションが需要があることが判明した場合、大規模で重要なオープンソースの動きに少しでも貢献し続けます。



All Articles