PHPのフレームワークBEARを動かしてみる(インストール編)

2011年7月4日

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というのを入れてみようかと思います。