SlimはSinatraに影響を受けたPHPのマイクロフレームワークです。マイクロフレームワークがじわじわ流行っていると聞いて試しに触って見ることにしました。
環境
参考資料
導入
Composerでインストールできます。ちなみにPHP >= 5.3.0じゃないと動かないようです(少なくともSlim 2系は)。
% cd path/to/project
% curl -s https://getcomposer.org/installer | php
composer.json
を作成します。
{
"require": {
"slim/slim": "2.*"
}
}
このコマンドでインストールします。完了するとvendor
ディレクトリにslimのソースが格納されます。
% php composer.phar install
ディレクトリ構成はこのようにしました。こうしたらいいよ、っていう案があれば@TAKAyuki_atkwskにコメントお願いします。
project/
composer.json
composer.lock
composer.phar
public/ # ドキュメントルート
.htaccess # Slimライブラリからコピー
index.php # Slimのメインファイル
templates/ # テンプレートディレクトリ
index.php
hello.php
vendor/
slim/slim/ # Slimライブラリ
アプリケーションの設定
設定はindex.php
で行います。Slim
クラスのオブジェクトを生成するときの引数として設定を渡します。今回はデバッグモードとテンプレートパスについての設定を行なっています。詳しくはSettings – Slim Framework Documentationに書いてあります。
<?php
require "../vendor/autoload.php";
$app = new \Slim\Slim(array(
"debug" => true,
"templates.path" => "../templates"
));
ルーティング
特定のURIについて各HTTPメソッドでアクセスされたときの処理を書きます。例えば/
にGETメソッドでアクセスした時の処理をこのように書くとします。/
にアクセスすると、Hello, world!
と表示されます。
$app->get("/", function () {
echo "Hello, world!";
);
アプリケーションの起動
$app->run()
でアプリケーションを起動します。設定やルーティングを行った後に書くのがいいと思います。
簡単なサンプルアプリを作った
実際に動くものを作ってみました。名前を入力すると、「Hello, 名前」と表示するアプリです。細かいところは気にしていないので、あしからず。
public/index.php
<?php
require "../vendor/autoload.php";
$app = new \Slim\Slim(array(
"debug" => true,
"templates.path" => "../templates"
));
$app->get("/", function () use ($app) {
$app->render("index.php");
})->name("home");
$app->post("/hello/", function () use ($app) {
$req = $app->request();
$name = $req->post("name");
$app->render("hello.php", array("name" => $name));
})->name("hello");
$app->run();
templates/index.php
<!DOCTYPE html>
<html>
<head>
<title>slim sample</title>
<meta charset="UTF-8">
</head>
<body>
<h1>slim sample</h1>
<p>please input your name</p>
<form action="/hello/" method="POST">
<input type="text" name="name" value="">
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
templates/hello.php
<!DOCTYPE html>
<html>
<head>
<title>hello!</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Hello, <?php echo htmlspecialchars($name, ENT_QUOTES, "UTF-8"); ?></h1>
<footer>
<a href="/">return to HOME</a>
</footer>
</body>
</html>
画面はこんな感じ。
感想
さらっと触っただけですが、手軽にWebアプリを作るには適していると思いました。同じ事をCakeでやろうとすると、もっとファイル数が多くなってゴテゴテすると思うし、フルスクラッチでやろうとするとファイルの中身がもうちょっと複雑になるのかなと思います。今回は本当に小規模なサンプルでしたが、もうちょっとページ数が増えてくるとSlimの恩恵を受けられるのかなという気がします。あと、DB使うときはCakeのModelクラス的なものがないので、工夫が必要そうです。それと元ネタとなったSinatraと比較してみたいです。