スタッフブログ

  • カテゴリ 技術全般 の最新配信
  • RSS

Sabelを使ってみる

 : 技術全般 2008/12/12 11:06

Blogger's Avatar

satoです。
今日は国産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はアノテーションとかフロー制御とかが特徴的なので、興味のある方は使ってみてください。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.