スタッフブログ
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はアノテーションとかフロー制御とかが特徴的なので、興味のある方は使ってみてください。
トラックバック



