スタッフブログ
satoです。
今日は国産PHP5フレームワークのSabelを使ってみようと思います。
Sabelはチュートリアルが充実しているので簡単に使えると思います。
今回は1.1.2を使ってみようと思います。
■インストール
まずはインストールマニュアルの通りにインストールします。
Windows系でのインストール方法も書かれているので、Windowsで開発している方も簡単に利用できると思います。
Sabelでは、sabelコマンドでファイルの生成などを行います。
PHPでデフォルトタイムゾーンを設定していない場合Strict Standards警告が出るので、php.iniに設定をします。
■データベース
まずはconfig/Database.phpを編集します。
ENVIRONMENTという定数で分岐していますが、これはそれぞれ
・PRODUCTION(リリース版)
・TEST(テスト時に使う用)
・DEVELOPMENT(開発版)
の3種類を設定することができます。今回は試してみるだけなのでDEVELOPMENTのみ設定します。
packageの項目に使用するDBを指定します。今回はMySQLを使用します。
データベースを設定したら、次はテーブルを作成します。
Sabelでは、SQLを書かなくても、PHPコードのみでテーブルを作成することができます。このPHPコードが書かれたファイルを「マイグレーションファイル」と呼びます。
マイグレーションファイルは通常、migration/default/に設置します。
ファイル名に規則があり、
バージョン番号は今回は最初なので1です。モデル名は、小文字にしたものがテーブル名になります。コマンドはテーブルを作成するので「create」です。
今回はPostというモデルを作ってみましょう。ファイル名は「1_Post_create.php」になります。
ファイルを作ったら、実行します。sabelコマンドではなくsakleコマンドを使います。
sbl_versionは、テーブルのバージョン管理に使われているものだと思われます。
テーブルを作成したら、対応するモデルを作成します。
■書き込み
scaffoldが見あたらないので、お試しでも真面目に書き込み画面を作ります。
app/index/controllers/Post.php
■まとめ
斜め読みしただけなので、Sabelの特徴を全く生かしていないですが、雰囲気だけでもわかったと思います。
Sabelはアノテーションとかフロー制御とかが特徴的なので、興味のある方は使ってみてください。
今日は国産PHP5フレームワークのSabelを使ってみようと思います。
Sabelはチュートリアルが充実しているので簡単に使えると思います。
今回は1.1.2を使ってみようと思います。
■インストール
まずはインストールマニュアルの通りにインストールします。
Windows系でのインストール方法も書かれているので、Windowsで開発している方も簡単に利用できると思います。
Sabelでは、sabelコマンドでファイルの生成などを行います。
sabel -l jaでプロジェクトをカレントディレクトリに生成します。
PHPでデフォルトタイムゾーンを設定していない場合Strict Standards警告が出るので、php.iniに設定をします。
[Date] ; Defines the default timezone used by the date functions date.timezone = "Asia/Tokyo"
■データベース
まずはconfig/Database.phpを編集します。
ENVIRONMENTという定数で分岐していますが、これはそれぞれ
・PRODUCTION(リリース版)
・TEST(テスト時に使う用)
・DEVELOPMENT(開発版)
の3種類を設定することができます。今回は試してみるだけなのでDEVELOPMENTのみ設定します。
packageの項目に使用するDBを指定します。今回はMySQLを使用します。
... case DEVELOPMENT: $params = array("default" => array( "package" => "sabel.db.mysql", "host" => "localhost", "database" => "sabeltest", "user" => "sabeluser", "password" => "sabelpass") ); break; ...複数のDBを設定し、状況に応じてそれぞれを利用することもできるようです。マスタ/スレーブ構成などにも対応できそうです。
データベースを設定したら、次はテーブルを作成します。
Sabelでは、SQLを書かなくても、PHPコードのみでテーブルを作成することができます。このPHPコードが書かれたファイルを「マイグレーションファイル」と呼びます。
マイグレーションファイルは通常、migration/default/に設置します。
ファイル名に規則があり、
{バージョン番号}_{モデル名}_{コマンド}.phpという形式でファイル名を付ける必要があります。
バージョン番号は今回は最初なので1です。モデル名は、小文字にしたものがテーブル名になります。コマンドはテーブルを作成するので「create」です。
今回はPostというモデルを作ってみましょう。ファイル名は「1_Post_create.php」になります。
<?php $create->column("id")->type(_INT) ->primary(true) ->increment(true); $create->column("title")->type(_STRING) ->length(256) ->nullable(false); $create->column("body")->type(_TEXT) ->nullable(false); $create->column("created")->type(_DATETIME) ->nullable(false);
ファイルを作ったら、実行します。sabelコマンドではなくsakleコマンドを使います。
sakle Migration development head
sabeluser@localhost[sabeltest]> show tables; +---------------------+ | Tables_in_sabeltest | +---------------------+ | post | | sbl_version | +---------------------+ 2 rows in set (0.00 sec)テーブルが作成されているのがわかると思います。
sbl_versionは、テーブルのバージョン管理に使われているものだと思われます。
テーブルを作成したら、対応するモデルを作成します。
sakle Generator model Post
■書き込み
scaffoldが見あたらないので、お試しでも真面目に書き込み画面を作ります。
app/index/controllers/Post.php
<?php class Index_Controllers_Post extends Sabel_Controller_Page { public function show() { $paginate = new Paginate("Post"); $paginate->setDefaultOrder("created", "desc"); $this-%gt;paginate = $paginate->build(10, $this->request->fetchGetValues()); } public function doPost() { $title = $this->request->fetchPostValue("title"); $body = $this->request->fetchPostValue("body"); $post = new Post(); $post->title = $title; $post->body = $body; $post->created = date('Y-m-d H:i:s'); $post->post(); $this->redirect->to("c: post, a: show"); } }app/index/views/post/show.tpl
<h1>Post</h1> <form action="<?php echo uri("a: doPost") ?>" method="post"> <div>title:<input type="text" name="title" /></div> <div><textarea name="body" rows="5" cols="50"></textarea></div> <div><input type="submit" value="Post" /></div> </form> <hr /> <?php if ($paginate->results): ?> <?php foreach($paginate->results as $post): ?> <div> <h2><?php echo htmlspecialchars($post->title) ?></h2> <div><?php echo nl2br(htmlspecialchars($post->body)) ?></div> </div> <?php endforeach ?> <?php endif ?>これで、 http:// 〜/public/index.php/post/show をブラウザで開くと、画面が表示されます。
■まとめ
斜め読みしただけなので、Sabelの特徴を全く生かしていないですが、雰囲気だけでもわかったと思います。
Sabelはアノテーションとかフロー制御とかが特徴的なので、興味のある方は使ってみてください。