上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

EthnaでMySQLデータベースにアクセスしてデータを取得

EthnaでのデータベースアクセスとしてPEAR::DBを使った方法がありますが、他のフレームワークと同様にO/Rマッパーも用意されていることを知ったので、試してみました。

【参考】
社長フラグ:初心者が送るEthna超入門その4「はじめてのapp-object」

●データベースを作成する
phpMyAdminなどで以下のデータベースを作成します。

・DB名:greeting
・テーブル名:greeting_word
・フィールド名:id auto_increment、word varchar(32)
・wordフィールドに「good morning」「hello」を追加

面倒な場合は以下のSQL文を流しこんでください。

CREATE DATABASE `greeting`;
CREATE TABLE `greeting`.`greeting_word` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`word` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `greeting`.`greeting_word` (`id`, `word`) VALUES
(1, 'good morning'),(2, 'hello');



●helloethnaプロジェクトを作成
ethnaの新規プロジェクトは、add-projectオプションでつくることができます。

$ cd /Applications/XAMPP/htdocs/Ethna
$ ethna add-project helloethna



●helloethnaプロジェクトからデータベースへ接続するための設定
データベースへの接続設定は、そのプロジェクトのetcフォルダにある設定ファイルで行います。

cd helloethna/etc
$ vi helloethna-ini.php

'dsn' => 'mysql://root:mysql@localhost/greeting',
※ローカル環境なのでrootユーザー、安易なパスワード(mysql)にしています。



●データベース操作用オブジェクトを生成
helloethnaプロジェクトフォルダの中で以下のコマンドを実行します。
これで、先ほど作ったgreeting_wordテーブルに対応した操作用オブジェクトが生成されます。

ethna add-app-object greeting_word



●データベースへアクセスしてデータを取得
helloethna/app/view/Greeting.phpを編集(Greeting.phpが無い場合は、「ethna add-view Greeting」で作成)

preforward() {
 // select * from greeting_word where id=1;
 $greetingWordObj=$this->backend->getObject('greeting_word','id','1');
 // 取得したオブジェクトを配列に格納
 $greetingWord = $greetingWordObj->getNameObject();
 // 配列をアクションフォームで扱うための処理
 $this->af->setApp('greetingWord',$greetingWord );
}



●表示用テンプレートの編集
helloethna/template/ja_JP/greeting.tplを編集(無ければ、「ethna add-template greeting」で作成)

<h2>app-object練習</h2>
<ul>
 {foreach from=$app.greetingWord item=item key=key}
 <li>{$key}:{$item}</li>
 {/foreach}
</ul>



http://localhost/Ethna/helloethna/?action_greeting=trueにアクセスすると、以下のように表示されます。
app-objectサンプル
私の場合、最初「undefined action」とエラーが出たので、「ethna add-action Greeting」でアクションを作成しました。

「DBObject」ではなくて「AppObject」という名前からすると、データベース以外のものも操作できそうな感じがするのですが、扱えるのはデータベースだけなのかな?

MacのXAMPPにEthnaをインストールしてみた

テンプレートエンジンにSmartyを利用したPHPフレームワークのEthna、調べてみるとPEAR経由でインストールできるようなので早速インストールしてみました。

●インストール
 インストール方法は公式サイトに書いてあるように、以下のコマンドだけで、Ethnaとそれに依存するSmarty、simpletestも一緒にインストールされます。

$ pear channel-discover pear.ethna.jp
$ pear update-channels
$ pear install -a ethna/ethna

インストール後にXAMPPのpearフォルダを見ると、
Ethna、Smarty、simpletestのフォルダが出来ています。
/Applications/XAMPP/xamppfiles/lib/php/pear

Ethna:ダウンロード



●ethnaコマンドを使えるようにする
 XAMPPのPEAR経由でインストールした場合、ethnaコマンドは、
/Applications/XAMPP/xamppfileslib/php/pear/Ethna/binにある「ethna.sh」です。
このファイルを開いて、一番上に以下のようにphpバイナリのパスとEthnaのパスを追記します。

PHP_COMMAND="/usr/bin/php"
ETHNA_HOME="/Applications/XAMPP/xamppfiles/lib/php/pear/Ethna"


さらに、.shを外して、パスの通っているフォルダにシンボリックリンクを置くと、いつでも利用できて便利です。

$ mv ethna.sh
$ cd /usr/local/bin
$ ln -s /Applications/XAMPP/xamppfiles/lib/php/pear/Ethna/bin/ethna ethna



●サンプルを動かしてみる

$ ethna add-project -b /Applications/XAMPP/htdocs/Ethna/sample sample
※EthnaフォルダはEthna用に作ったフォルダです。

Ethna:アプリケーション構築手順(1)


これで、sampleフォルダの中に以下のフォルダが自動生成されます。

.ethna etc log template
app lib schema tmp
bin locale skel www


http://localhost/Ethna/sample/www、にアクセスすると、以下のエラーが沢山。。

Deprecated: Assigning the return value of new by reference is deprecated in 〜


調べたところ、このエラーはPHP5.3の場合に表示されるものだそうで、php.iniを以下のように書き換えればこのエラーが表示されなくなります。

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED


無事、サンプルが表示されました。
Ethnaサンプル
フレームワークがPEAR経由でインストールできるのはお手軽でいいですね。

MacにXAMPPを入れた際にPEARのパス設定で悩んだ点

WindowsにXAMPPを入れた時はすんなりいけたのですが、MacBook(Snow Leopard)にXXAMPを入れた際にPEARの設定で少しハマったので、備忘録として書いておきます。

MacにXAMPPを入れた後に、

/Applications/XAMPP/xamppfiles/bin/pear install PEAR


でPEARをインストールすると、/Applications/XAMPP/xamppfiles/lib/phpに「pear」というフォルダが作られて、/Applications/XAMPP/etc/php.iniの「include_path」が以下のように追記されます。

;***** Added by go-pear
include_path=".:/Applications/xampp/xamppfiles/lib/php:
        /Applications/xampp/xamppfiles/lib/php/pear" ※実際は1行で書かれてます
;*****


その後にApacheを再起動すればPEARが使えるようになるはずなのですが、エラー。。

Fatal error: Class 'PEAR_Error' not found 〜


PEAR_ErrorクラスはPEAR.phpの中にあるので、pearフォルダへのパスが上手く設定できてないということになるのですが、phpinfoでinclude_pathを確認したところ、ちゃんとpearフォルダへのパスは設定されていました。
試行錯誤した結果、php.iniの先ほどのinclude_pathの「.:」の部分を消したところ、上手くPEARが使えました。

;***** Added by go-pear
include_path="/Applications/xampp/xamppfiles/lib/php:
       /Applications/xampp/xamppfiles/lib/php/pear" ※実際は1行で書かれてます
;*****


「.」はカレントディレクトリを示すのですが、何故これがあると上手くパスが通らなかったのかは分かりませんが、PEARが使えるようになったので、とりあえずは良しとします。
プロフィール

星羽(榎田)

Author:星羽(榎田)
PHPエンジニアがRuby、PHPなどをいじった時の備忘録

最新記事
最新コメント
最新トラックバック
カテゴリ
スポンサードリンク
検索フォーム
RSSリンクの表示
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。