MongoDBをYii Frameworkとdirectmongosuiteエクステンションからホゲホゲしてみる

PHPは3年くらい前にちょっとしたバッチプログラムを書いた事ある程度なのですが、
なんだかんだ言っても、今後も使われる言語なんだろうなぁという印象でいます。
 
チョコっとみてみたのですが、ひねくれ者な自分としては、
あんまりみんながやってなさそうなヤツがイイかなと思い、
Yii Frameworkというのを試してみようと思います。
Yiiは”Yes, it is!”の頭文字っていうことらしくて、その辺のネーミングもなんかイイかな、と。
 
■ Readme
とりあえずYiiのGithub(https://github.com/yiisoft/yii/)のReadmeから見ていきます。
あんまり、特質すべき事も無さそうですが、Windowsでは”yiic”っていう
コマンドラインツール的なのが使えるのかなっていうとことか、
東京で働いていた時の部署ではPHPのバージョンを上げるのに苦労していたのですが、
“The minimum requirement by Yii is that
your Web server supports PHP 5.1.0 or above”
って事で、PHP5からしかダメよってのが新しいフレームワークっぽくてナイスかな、と。
 
 
■ PHPの開発環境
“PDT”でググってたら↓のZENDのページに飛んで、
http://www.zend.com/en/community/pdt/downloads
“Zend Eclipse PDT”っていうのが、”PDT 3.0.2 w/Eclipse Indigo”って事らしいす。

 
後はWindowsでPHPっていったらXAMPPでしょって事で↓
http://www.apachefriends.org/jp/xampp-windows.html
 
Eclipse-PHPとXAMPPをC直下にYYY(Yes Yes Y’all!の略的なw)という
ディレクトリを作ってそこに配置します。

XAMPPのコントロールパネルからApache起動したら、なぜだか分からないですが起動出来ず。
プロセスみてみると、なんか80番ポートリスンしてるヤツいるし。

プロトコル ローカル アドレス 外部アドレス 状態
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING

 
ググってたら↓のように-oanで叩くとプロセス番号も表示出来るんですね。

C:\Users\eiji.shinohara>netstat -oan

アクティブな接続

プロトコル ローカル アドレス 外部アドレス 状態 PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1556

 
タスクマネージャーからプロセス落とそうと思ったら出来なくて、
TASKKILLというコマンドを使って↓のように落としました。

C:\>taskkill /PID 1556
成功: PID 1556 のプロセスに強制終了のシグナルを送信しました。

 
Eclipse上でHello World的なPHPファイルを作ってRunしてみたら、
なんか怒られてるし、、と。んま、なんの設定もしてないので、
そりゃそうかって気はしてくるわけですが。。w

 
↓をhttpd.confに追加してやってApache再起動してやってアクセスすると、、

Alias /YYY “C:/YYY/eclipse-php/workspace/YYY/”
<Directory “C:/YYY/eclipse-php/workspace/YYY/”>
AllowOverride None
Options Indexes MultiViews ExecCGI
Order allow,deny
Allow from all
</Directory>

 
↓無事Hello World出来ました。

 
 
■ Yii Frameworkのインストール
Yii Frameworkのページからtar.gzファイルをダウンロードしてきて、
DemoディレクトリにあるBlogアプリにアクセスしてみたら、
サクっと表示出来ました。さすがPHP。この辺にお手軽さが垣間見れます。

 
DemoのBlogアプリのindex.php見てみると↓のように見にいってるんですね。

<?php

// change the following paths if necessary
$yii=dirname(__FILE__).’/../../framework/yii.php’;
$config=dirname(__FILE__).’/protected/config/main.php’;

protectedディレクトリの中には、yiic.batってコマンドツールがあったり、
config/main.phpとか読んでると設定系がブワーっと記載されています。
#Java屋な自分からするとmain文か?みたいなイメージがあるんですが、
#viewの下にもview/layout/main.phpってのもあったりしました。
 
んま、そんなこんなで、インストールっていうか、単純に
ディレクトリごとファイル置けば動くことが分かりました。
 
 
■ FiiからMongoDBにアクセスできるようにするには
Yii FrameworkのWebページでextensionを”mongodb”で検索してみると、
↓のようにチョロチョロ出てきます。”aoyagikouhei”さんという日本人の方も
セッション情報をMongoDBで管理する的なエクステンションとか、
ログをMongoDBに溜め込む的なエクステンションを提供してるようですね。

 
でもって、今回はdirectmongosuiteというのを使ってみます。
上記のaoyagiさんのモジュールも含まれてるようですし。
あんまりちゃんと読んでないのですが、yiimongodbsuiteはイイんだけど、
ActiveRecord的なのが重いとか、スキーマ変更するときにホゲホゲみたいのが発生してダルい的な事が
書いてありました。
#個人的にその辺ちょっと気になってて。スキーマ変えるの楽なのに、
#プログラム変えるのダルかったらしょうがねぇなぁと。
 
 
■ MongoDBのWindowsマシンへのインストール
http://www.mongodb.org/downloadsからダウンロードしてきて、
↓のように配置するだけです。binの下にあるmongod.exe叩くだけでサーバー起動。お手軽。

 
でもってクライアントも、binの下にあるmongo.exeを叩くだけです。
試しにInsertとSelectをしてみます↓

#db.hoge.find;で怒られてますがw
#JavaScriptって事でfindメソッドなのでfind()って感じでカッコが必要です。
 
 
■ Yiiにdirectmongosuiteを突っ込んで動かしてみる(その1)
directmongosuite.0.2.6.zip をダウンロードしてきて、解凍してものを、
yii-1.1.10.r3566\demos\helloworld\protected\extensions に配置します。
 
index.phpに↓を足して、config/main.phpを読み込むようにします。
$config=dirname(__FILE__).’/protected/config/main.php’;
 
config/main.phpはとりあえず動かしたい的な感じなので最小限に。

<?php

return array(
		// autoloading model and component classes
		'import'=>array(
				'application.models.*',
				'application.components.*',
				'ext.directmongosuite.components.*',
		),

		'behaviors' => array(
				'edms' => array(
						'class'=>'EDMSBehavior',
						// 'connectionId' = 'mongodb' //if you work with yiimongodbsuite
						//see the application component 'EDMSConnection' below
						// 'connectionId' = 'edms' //default;
						//'debug'=>true //for extended logging
				)
		),

		// application components
		'components'=>array(

				//configure the mongodb connection
				//set the values for server and options analog to the constructor
				//Mongo::__construct from the PHP manual
				'edms' => array(
						'class'            => 'EDMSConnection',
						'dbName'           => 'testdb',
						//'server'           => 'mongodb://localhost:27017' //default
						//'options'  => array(.....);
				),
		),
);

 
んで、動かしたら何かエラーになっちゃって、、。
ってか、、そもそもPHPのMongoDBドライバー入れてなかったなと。
 
 
■ PHPのMongoDBドライバーの設定
ググったらpeclで入れられるとかいうページも見かけたのですが出来なかったので、
普通にhttp://pecl.php.net/package/mongoからdllファイル落としてきて、
xampp/php/extの中に入れてやりました。php.iniには
↓のように設定を入れてやります。
extension=php_mongo.dll
 
 
■ Yiiにdirectmongosuiteを突っ込んで動かしてみる(その2)
お膳立ては整いましたので、上記でMongoDBに入れた値を、
YiiのControllerクラスから取り出してブラウザに表示してみます。
 
Controllerのコードは↓こんな感じ。
(ほぼdirectmongosuiteのページに載ってるまんまですが…汗)

<?php

/**
 * SiteController is the default controller to handle user requests.
 */
class SiteController extends CController
{
	/**
	 * Index action is the default action in a controller.
	 */
	public function actionIndex()
	{
		//create the PHP class 'Mongo' with the configured connection (see id 'edms' in config/main.php)
		$mongo = Yii::app()->edmsMongo();

		//create the PHP class 'MongoDB'
		$mongoDb = Yii::app()->edmsMongoDB();

		//create the PHP class 'MongoCollection' with the collectionName 'hoge'
		$collection = Yii::app()->edmsMongoCollection('hoge');

		$user = $collection->findOne(array('twitter' => 'shinodogg'));
		print_r($user);
	}
}

 
画面から実行してみると↓こんな感じ。Yay!

 
めでたしめでたし。
 
 

MongoDB and PHP
MongoDB and PHP

posted with amazlet at 12.06.13
Steve Francia
Oreilly & Associates Inc
売り上げランキング: 145599

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. […] « MongoDBをYii Frameworkとdirectmongosuiteエクステンションからホゲホゲしてみる […]

  2. tomoko より:

    突然のメールですみません。
    青山と申します。

    ESLの学生としてトロントに語学留学をしております。
    トロントについてネットで検索をしていたらこちらのブログに
    たどり着きました。

    現在トロントにいらっしゃるようですね。
    今日は最高気温を記録したようで、とても暑かったですね。
    明日も同じくらい暑いようですので、お互い夏バテには気をつけないと
    いけないですね。

    ところで、メールをさせていただいた理由ですが
    持ってきたパソコンについて教えていただきたいことが
    あるからです。

    もし可能であれば教えていただけないでしょうか?

    “McAfee Security Scan Plus”というるウィルス保護のソフトで
    ”お客様のパソコンは危険な状態にあります”とメッセージが出ます。何が危険なのかもよく分りません。

    放置しておいても問題ないのでしょうか?

    これだけの情報でお分かりになるか分りませんが
    教えていただけたら助かります。

    本当に勝手なメールと質問ですみませんが
    もしよろしければお返事をください。

    青山

  3. shinodogg より:

    篠原です。
    コメントありがとうございます〜。
    おぉ、語学留学中なのですね、うらやましいです。頑張ってください。
    おそらく何か危険なファイルをPC内で察知したのだと思います。
    具体的にどのファイルが危険か記されていないでしょうか?
    もしくはライセンスの期限が切れているとか。。
    セキュリティソフトは他にも↓など、フリーのものもございますので、
    http://www.avast.com/en-ca/index
    他も試して何事もなければ大丈夫なのではないかと思います。
    少しでもご参考になりましたら幸いです。

  4. tomoko より:

    質問にお答えいただきありがとうございます。
    ご紹介いただいたフリーのセキュリティソフトをインストールしてみました。とくに問題ないようです。助かりました。
    勝手なメールにも関わらず、ご丁寧にありがとうございました。

  5. shinodogg より:

    いえいえ、とんでもないです〜
    また何かありましたらご連絡ください。