『Webアプリエンジニア養成読本』を読みながら、PHPマイクロフレームワークであるSlimを使ってプログラミングしています。
[amazonjs asin=”4774163678″ locale=”JP” title=”Webアプリエンジニア養成読本しくみ、開発、環境構築・運用…全体像を最新知識で最初から! (Software Design plus)”]
Slimはルーティング中心のシンプルなフレームワークです。RubyのSinatraを参考に作られたらしい。Sinatraもそうですが、読んだり調べたりするだけだと、何が何やらさっぱりわからない・・・。書いてみて、あーそういうことかーとわかります。テンプレートエンジンTwig、データベース操作illuminate/Eloquentとの組み合わせで、MVCを実現できます。
SlimをApacheで利用する場合、mod_rewriteの設定が必要です。『Webアプリエンジニア養成読本』にはこの部分がすっぽりと抜けているので、わかりにくいです。
例えば、Apache本体で、
[shell]
Alias /hoge/ "/var/www/http/hoge/htdocs/"
<Directory "/var/www/http/hoge/htdocs/">
AllowOverride All
Options All
Order allow,deny
Allow from all
</Directory>
[/shell]
となっている場合、.htaccessは、
[shell]
RewriteEngine On
RewriteBase /hoge
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
[/shell]
とし、/var/www/http/hoge/htdocs/配下(index.phpと同じ場所)に置きます。
.htaccessのテンプレートは、Slimパッケージの中にあります。
index.phpは、
[php]
<?php
$app = new \Slim\Slim();
$app->get(‘/’, function () use ($app) {
$app->render(“welcome.php”);
});
$app->post(‘/post/login’, function () use ($app) {
$app->render(“login.php”);
});
$app->run();
[/php]
として、welcome.phpに、
[html]
<form action="post/login/" method="post">
[/html]
とフォームを書いておけば、login.phpが呼び出されるかと思ったのですが、呼び出せませんでした。「404 Page Not Found」のエラーになってしまいました。
しばらくハマったのですが、そりゃそうです。formのaction指定に誤りがありました。
[html]
<form action="post/login" method="post">
[/html]
というように、loginの後のスラッシュを消しておかなければなりません。そうしないとどこにもマッチせず、Not Foundになります。むろん、index.php側を「$app->post(‘/post/login/’, function ($app) {」と修正しても構いません。HTMLのフォームの記述と、Slimの記述と、両者を一致させる必要があります。
mod_rewriteは間違いも多いところなので、httpd.confとかに、
[shell]
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9
[/shell]
としておいて、設定・試験中はログを見ながら作業するといいと思います。ログが膨大に出ちゃいますが、試験環境ならいいかと。