PHPのフレームワークBEARを動かしてみる(インストール編)
PHPにBEARというフレームワークがあるのを初めて知った。
BEARというのは、ページ指向のフレームワークだそうだ。
3つのコンポーネント
- ページ – リソースリクエストとリソース状態のビューへのプッシュ
- リソース – インターフェイスとURIを持った情報
- ビュー – リソースの表現
を使って、webを構築するようだ。
で、リソース指向でページ指向らしい。
なにが良い感じで、何が悪い感じなのかは使ってみないと分からない。
ということで、とりあえず環境構築から。
BEARの公式wikiにインストール方法が書いてあるので、それを参考にやってみる。
http://code.google.com/p/bear-project/wiki/Install
まずは、
CentOS上に、Apacheを入れて、PHPをフルコンパイル、フルインストール。
PHPは、とりあえず、5.3あたりを採用
PHPが使える状態にしたらBEARのインストール
pearというツールを使って入れるようだ。
pearというのは、ん~、Rubyで言うところの、gemsか。
PHP向けのパッケージを管理するツールみたい。
5.3には、PHPにpearが入っているようなので、コマンドを叩いてみる
[php@localhost php]$ pear Commands: build Build an Extension From C Source bundle Unpacks a Pecl Package channel-add Add a Channel channel-alias Specify an alias to a channel name channel-delete Remove a Channel From the List channel-discover Initialize a Channel from its server channel-info Retrieve Information on a Channel channel-login Connects and authenticates to remote channel server channel-logout Logs out from the remote channel server channel-update Update an Existing Channel clear-cache Clear Web Services Cache config-create Create a Default configuration file config-get Show One Setting config-help Show Information About Setting config-set Change Setting config-show Show All Settings convert Convert a package.xml 1.0 to package.xml 2.0 format cvsdiff Run a "cvs diff" for all files in a package cvstag Set CVS Release Tag download Download Package download-all Downloads each available package from the default channel info Display information about a package install Install Package list List Installed Packages In The Default Channel list-all List All Packages list-channels List Available Channels list-files List Files In Installed Package list-upgrades List Available Upgrades login Connects and authenticates to remote server [Deprecated in favor of channel-login] logout Logs out from the remote server [Deprecated in favor of channel-logout] makerpm Builds an RPM spec file from a PEAR package package Build Package package-dependencies Show package dependencies package-validate Validate Package Consistency pickle Build PECL Package remote-info Information About Remote Packages remote-list List Remote Packages run-scripts Run Post-Install Scripts bundled with a package run-tests Run Regression Tests search Search remote package database shell-test Shell Script Test sign Sign a package distribution file svntag Set SVN Release Tag uninstall Un-install Package update-channels Update the Channel List upgrade Upgrade Package upgrade-all Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters] Usage: pear [options] command [command-options] Type "pear help options" to list all options. Type "pear help shortcuts" to list all command shortcuts. Type "pear help " to get the help for the specified command.
なにやら、使えるコマンドがズラズラ出てきました。
pearは正常に動いているようです。
なので、とりあえず公式にあるとおりにコマンドを入れます。
pear channel-discover pear.bear-project.net
これは、gemでいうところの、gem souces -a [source] みたいなものか。。
pear channel-update pear.php.net
これは、追加したチャンネルの情報を更新するコマンドかな?
pear upgrade pear
本体をアップデート
pear upgrade-all
更新されているパッケージを全部アップグレード
pear install -a bear/BEAR
BEARをインストール
ここで、ちょっと変なメッセージが出ました。
Failed to download bear/BEAR within preferred state "stable", latest release is version 0.9.0RC4, stability "beta", use "channel://pear.bear-project.net/BEAR-0.9.0RC4" to install
インストールポリシーがstableなのに、ベータを入れようとしてるよ。という事らしい。
BEARは…っと
ベータしかない。。
ので、ベータを入れる方法を検索
バージョンを指定して入れることで、ベータでも入れられるようだ。
pear install -a bear/BEAR-0.9.0RC4
そしたら、今度は
WARNING: "bear/BEAR" is deprecated in favor of "channel:///" Failed to download bear/Panda within preferred state "stable", latest release is version 0.3.34, stability "beta", use "channel://pear.bear-project.net/Panda-0.3.34" to install
というエラーが
Pandaが入っていないと言っているようです。
なので、Pandaをインストール
pear install bear/Panda-0.3.34
それから、再度bearのインストール
これで、一応BEARは入りました。
ということで、コマンドを叩いてみます。
bear
そしたら、こんなエラーが出ました。
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /home/bnavi/php/lib/php/BEAR.php on line 20 503 Service Unavailable [500] BEAR_Exception - BEAR Auto loader failed for [Console_CommandLine] - Array ( [class] => Console_CommandLine [file] => Console/CommandLine.php )
Console_CommandLineというクラスが見つからないらしい。
PHPのlibにも入っていません。
なので、pearで探してみます。
pear search Console_CommandLine Matched packages, channel pear.php.net: ======================================= Package Stable/(Latest) Local Console_CommandLine 1.1.3 (stable) 1.1.3 A full featured command line options and arguments parser
ありました。
ということでインストール
pear install Console_CommandLine
再度bearコマンドを実行
bear
[php@localhost php]$ bear PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /home/bnavi/php/lib/php/BEAR.php on line 20 BEAR command line interface Usage: bear [options] bear [options] [options] [args] Options: -h, --help show this help message and exit -v, --version show the program version and exit Commands: create create resource. read show resource. update update resource. delete delete resource. clear-cache clear all cache. clear-log clear all log. clear-all clear cache and log. init-app create new application. set-app set application path. show-app show application path.
今度はうまくいったようです。
続いて、プロジェクトを作成してみます。
bear init-app helloworld
今度は、こんなエラーが。。
Error: BEAR Auto loader failed for [File_SearchReplace]
File_SearchReplaceが無いようなので、これもpearでインストール
pear install File_SearchReplace
再度init-app実行
うまくプロジェクトを作成出来たようです。
続いて、Apacheの設定で、公開してみます。
Listen 4000 ServerAdmin you@example.com DocumentRoot "/mnt/hgfs/aptana/bear_helloworld/htdocs" ErrorLog "logs/error_4000_log" CustomLog "logs/access_4000_log" common Options +FollowSymLinks +ExecCGI AllowOverride FileInfo Order allow,deny Allow from all
プロジェクトのhtdocsの中には、helloWorld.phpファイルがあるので、このファイルをブラウザから見ることが出来たら、成功です。
と、ブラウザで見てみると、再びエラー
Warning: require_once(FirePHPCore/FirePHP.class.php): failed to open stream: No such file or directory in /home/bnavi/php/lib/php/BEAR/BEAR/scirpt/debug_init.php on line 17 Fatal error: require_once(): Failed opening required 'FirePHPCore/FirePHP.class.php' (include_path='/mnt/hgfs/aptana/bear_helloworld:/home/bnavi/php/lib/php:/home/bnavi/php/lib/php/vendors/PEAR:/home/bnavi/php/lib/php:.') in /home/bnavi/php/lib/php/BEAR/BEAR/scirpt/debug_init.php on line 17
FirePHPが入っていないと駄目なようです。
仕方が無いので、入れてみます。
pear channel-discover pear.firephp.org
pear install firephp/FirePHPCore
これで、一応エラーがなく画面が表示されるはずです。
DBアクセスのテストと思って、適当にRoファイルを作成してコマンドラインで叩いてみたら、またエラーが出ました。
#/home/bear/helloworld/App/Ro/User.php
<?php class App_Ro_User extends BEAR_Ro { public function onRead($values) { $result = array( array('id' => 1, 'name' => 'tom'), array('id' => 2, 'name' => 'stellaqua') ); return $result; } } ?>
というファイルを作成し、
プロジェクトのディレクトリで
bear read User
と叩いた所、
PHP Fatal error: Class 'Console_Color' not found in /home/bnavi/php/lib/php/BEAR/Dev/Shell.php on line 549
というのが出ました。
なので、pearでまた入れてみます。
pear install Console_Color
再度、
bear read User
を実行してみたら、うまく表示されました。
code 200 header n/a body array ( 0 => array ( 'id' => 1, 'name' => 'tom', ), 1 => array ( 'id' => 2, 'name' => 'stellaqua', ), )
次に、実際にDBに接続してデータを持ってきます。
接続先は
App/app.yml ファイルに定義してあります。
App_Db: dsn: default: 'mysql://root:root@localhost/bear_helloworld' slave : 'mysql://root:root@localhost/bear_helloworld' test : 'mysql://root:root@localhost/bear_helloworld'
slaveDBをここで設定出来たりするので、selectだけをslaveに振り分けると言うことが出来そうです。
さて、先ほど作成したUser.phpファイルは、単純にArrayの配列を返していたので、
ここで実際にDBに接続してDBのデータを返すように変更してみます。
<?php class App_Ro_User extends App_Ro { protected $_table = 'users'; public function onInject ( ) { parent::onInject(); $this->_queryConfig['pager'] = 1; // ページャ利用 $this->_queryConfig['perPage'] = 5; // 1ページのアイテム数 $this->_query = BEAR::dependency('BEAR_Query', $this->_queryConfig, false); } public function onRead($values) { $sql = "SELECT * FROM {$this->_table}"; $result = $this->_query->select($sql, array(), $values); return $result; } } ?>
この状態で、再度
bear read User
うん、エラーになりました。
PHP Fatal error: Class 'MDB2' not found in /home/bnavi/php/lib/php/BEAR/Mdb2.php on line 167
だそうなので、MDB2というのを入れてみようかと思います。
ディスカッション
コメント一覧
作者です。試用ありがとうございます。
BEAR同梱のPEARディレクトリ/BEAR/vendors/PEAR/ にパスを通すのに不具合があるようでマニュアルのトラブルシューティングに情報追加しました。パッケージも修正します。
お手数かけますが宜しくお願いします。