Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

cakePHPはRORから

2007/02/26 | cakePHP

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

cakePHPは「Ruby on Rails」の流れを汲むフレームワークだ。はやっている言葉だから知ってはいたが、どういうものかはよく知らなかった(だって普通のレンタルサーバでRubyが使えるところなんてないから)。しかし最近諸々調べるにしたがって、かなりすばらしいツールであることがわかってきた。そのすばらしい点というのは「データベースにテーブルを作って、もとからあるクラスを継承しさえすれば(メソッドを何も書かずとも)ウェブアプリになってしまう」というところだ。そりゃ、こんなことができれば流行るわけだ。今日はそのことがわかった記念ということでちょっとメモ。
では、これをcakePHPで実現するには・・・ということになるのだが、まずは試してみた。
基本的にこのフレームワークはデータベース連携ありきだから、一例として本を管理するウェブアプリを作ることにする。最初は簡単なところで「書籍IDと本のタイトル」を管理することにする。
最初に書いてしまうと必要なのはデータベースのテーブル、モデルのクラス、コントローラーのクラスの3つだけでいい。表示とかは勝手にやってくれる。すごっ。
まずはテーブルの作成。cakePHPのルールの一つでテーブルのタイトルは英単語の複数形を使用するとのこと。その他クラスの命名規約等も考慮すれば、(いわゆるmojaviでいうところの)一つのモジュールを作るのにキーワードを一つ決めるのがよさそうだ。もちろん今回の場合は「book」になるだろう。で、テーブル名の話に戻るが、テーブル名は複数形を使用するらしい。だから必然的にここで利用するテーブルは「books」という名前になる。次にカラム名だが主キーは常に「id」という名前にしておく(ここでは書籍IDといったところか)。書籍名はまぁなんでもいいでしょう。これでテーブルはOK。ちなみに以下のSQLでテーブルを作成した。

create table books (id varchar(32) primary key,title text);

次にモデルを作成する。配置場所は(ドキュメントルート)/app/models/。ここにbook.phpという名前でモデル用のファイルを作成する。

<?php
class Book extends AppModel {
var $name = ‘Book';
}
?>

たったこれだけ(モデルは単数形で作る)。何にも考えなくていい。AppModelクラスを継承するだけでいい。あとクラス名の頭を大文字にしてることくらいか・・・。

次にコントローラー。こっちは複数形にする。配置場所は(ドキュメントルート)/app/controllers/。ファイル名はbooks_controller.phpとして以下の内容を記述する。

<?php
class BooksController extends AppController
{
var $scaffold;
var $name=’Books';
}
?>

こちらもたったこれだけ。唯一「$scaffold」というのがミソで、これを指定することによって、あらかじめcakePHP内で用意されているデータの一覧表示、追加、修正、削除機能をそのまま利用できるようになるとのことだ。

で、実際にアクセスする際には以下のURLをたたく(ここは複数形)。
http://(サーバ名)/books

たったこれだけ。これだけで最低限のウェブアプリが出来てしまう。普通はなかなか、このまま使うのは難しいかもしれないけど、なんらかの管理画面なら結構このまま使えてしまうはず。
サンプルアプリの勉強は、この$scaffoldからはじめるのがよさそうだ。ちなみにこの言葉の意味は「足場、断頭台」。う〜む。なんかいいネーミングだね。

サンプルアプリの導入

2007/02/24 | cakePHP

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

とりあえず何をどうしていいかわからない。こういうときは実践あるのみ。サンプルアプリケーションを動かしてみることにした。使用したのは以下のさいとにある掲示板サンプル。
http://puyo2.upper.jp/cake/

ソースをダウンロードして解凍後、その中のREADME.TXTに記述のあるとおりにインストールした。あとREADME.TXTにあるテーブルの定義から、そのままテーブルを作成した。もちろん最初に設定したデータベース内にテーブルを作成した。これでインストールは終わり。

で、動かしてみた。
書き込みはできたっぽいけど、表示でエラーが出る。エラーの内容は・・・「その配列にはあなたが指定したindexはありませんよ」とのこと。むむむ。
サンプルのソースを見れば簡単。$row[‘forum’]と指定されているところを$row[‘Forum’]と書き直すことで無事動作した。

ソースを見たけどまったくシンプル。「もちろん」というかすごいのはSQL文が書かれていないこと(自分としてはSQL文あったほうがなんとなく今迄っぽくていいのだけれど)。
今度はこのソースを読んで、噛み砕いていきたい。

しかし・・・このサンプル、「confirm.thtml」なんてファイルがあるから「確認画面もつかってるのか!」と思ったら「確認と見せかけて、書き込み官僚」だって(「官僚」って・・・誤字じゃん・・・)。少し期待したんだけどね。

cakePHPのインストール

2007/02/23 | cakePHP

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

ようやく重い腰を上げてcakePHPを触り始めた。今まで使い慣れたmojaviから乗り換えるのはやはり気が重い。フレームワークとはいっても今まで自分が使っていたものとまったく違うわけだから、ぜんぜんやり方がわからない。きっとそういう人も多いと思うのでメモしていくことにした(ある程度までいったら別サイトで取りまとめします)。
ちなみに今回はPHP5に慣れ親しむためにFedoraCore4を使用した。デフォルトでインストールされているのはPHP5.0.4(だったかな?)。利用するソフトは適宜yum等でアップロードするのがいいだろう。

■cakePHPのインストール
以下のサイトからリンクをたどって最新の安定板をダウンロードして使用した(執筆時点の最新安定板は1.1.13.4500)。ダウンロードしたファイルを解凍し、その中にあるファイルを丸ごとウェブサーバのドキュメントルートにアップロードする。

■パーミッションの設定
以下のディレクトリ以下をすべて777に設定した。
(DocumentRoot)/app/tmp
具体的には以下のコマンドを実行した。
chmod -R 777 /var/www/html/app/tmp
ここにはキャッシュやらログやらセッションやらのファイルが格納されるため、書き込み権限と実行権限が必要になるからだ。

■データベースのセットアップ
cakePHPは他のライブラリを導入することなく、データベースを操作できる。そのためにデータベースを操作するための設定情報をcakePHPに保存しておく必要がある。設定ファイルは以下のとおり。
(DocumentRoot)/app/config/database.php.default
上記のファイルをコピーしてdatabase.phpとし、そこに設定情報(データベース名やユーザ名等)を記述する。設定に際してdriverに何を使用するか、記述する部分があり、「mysql」「postgrs」などを記述する。サンプル中には「pear-drivername」との記述もあるがmdb2が使えるかどうかは不明(おいおい調べていかなくてはいけない)。
もちろん使用するデータベースは別途用意しておく必要がある。

■mod_rewriteの設定
cakePHPではシンプルなURLを使用するために、mod_rewriteを使う。これはhtaccessファイルに記述されているのだが、当然htaccessファイルが利用できるように設定しておかなくてはいけない。よってapacheの設定でドキュメントルートについて、以下のように設定をしておかなくてはいけない。AllowOverride All

ここまでで準備はOK。ドキュメントルートにアクセスすると「CakePHP Rapid Development」なるメッセージと諸々情報が表示される。

ここまでで一段落。とりあえずcakePHPのインストールは完了だ。たしかにインストールは簡単。しかしここから何をどうしてよいかはまだまったくわからない。これからマニュアル&サンプルと格闘していかなくてはいけないのだが、メモをかねてここで書いていこうと思う。

mojavi3をあきらめる


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

今回諸々mojavi3を勉強するにあたり、いったんmojavi3に関しては検討からはずすことにした。mojaviのサイトもほとんど動かなくなって結構時間がたつし、サイトリニューアル後もまだ動きがない。このまま消えゆく可能性も否定できないからだ。
あとmojavi3から派生したagaviやsymfonyを使うという手もあるからだ。しかしこちらも慎重にならざるをえない。agaviはmojavi4に統合されるという話がある(ていうかその前にmojaviプロジェクトが動いてない)。symfonyや、他のフレームワークethnaは、コマンドラインからフレームを準備して作っていく、という手順が好きになれない。きっと別のやり方もあると思うのだけど、コマンドラインが使えない環境だと不便になりそう。
もっとも・・・コマンドラインが使えない(サーバにログインできない)ような環境での開発でフレームワークは必要ないのかもしれないけれど、やはり一つ作ったものはできるだけ使いまわしたい。

その他のPHPフレームワークとしては大本命と目されるZend Frameworkと、あとはcakePHPといったところか。Zendが早くstableなバージョンが出てくれればとは思うのだが、まだしばらく時間がかかりそう。少しcakePHPを触ってみようと思う。

PEARはPHP5対応ではない

2007/02/17 | mojavi3

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

自分的には、mojaviのキーポイントは、如何に必要なPEARライブラリを使って効率よいプログラミングをするか、というところにある。
mojavi3は標準でデータベースを管理できるようになっているようだが、実際にコーディングする段階では、PEAR::DBやPEAR::MDB2を使うほうが何かと便利になるので別途組み込むことにした。
いざ組み込んでみると大量にエラーが吐かれる。どうもこれはPEARがまだ完全にPHP5に対応していないことに起因するようだ。MDB2でさえこの状態なのだから、他のパッケージならなおさらのことだろう。
完全な解決策ではないが、こんなふうにしてエラーを回避することにした。

ini_set(“display_errors”, 0);
ini_set(“error_reporting”, false);
require_once(‘MDB2.php’);
ini_restore(“error_reporting”);
ini_restore(“display_errors”);

美しくはないけれど、PEARライブラリをすべて自前で書き直すわけにはいかないので、これが精一杯だろう。ここまでやって、無事データベースに接続できることも確認できた。
まぁ、及第点といったところだろうか。



Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524
守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524