目次
Slim3_PHP Advent Calendar 2018
こちらから順番に追えます。
何はともあれHelloWorld
前回比較用でLaravelとSlim3をインストールしていますが、また新しくSlim3をインストールするところからやってみます。
XAMPPのhtdocs内に適当なディレクトリ(今回はslim3
というディレクトリ)を作ります。
slim3ディレクトリを開いてShift+右クリック
でWindows PowerSHellを開き、下記コマンドで叩く。
composer require slim/slim
slim3ディレクトリ直下にpublic
ディレクトリを作成
確認のため、ls
コマンドを叩きましょう(省略可)
PS P:\xampp\htdocs\slim3> ls
ディレクトリ: P:\xampp\htdocs\slim3
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2018/12/24 12:26 public #実際にWebサイトを表示するものを格納するディレクトリ
d----- 2018/12/24 12:06 vendor #composerで追加されたものが格納されている
-a---- 2018/12/24 12:06 56 composer.json #composerで(再)利用するときに使うjsonファイル
-a---- 2018/12/24 12:06 10895 composer.lock #composerで(再)利用するときに使うjsonファイル
次に、ルートディレクトリの設定を行います。
Slim3を利用するにはpublic
をルートディレクトリにする必要があります。
XAMPPのデフォルト設定のままだとpublicディレクトリにアクセスするにはhttp://localhost/slim3/public/
という長いurlになってしまったり、slim3の機能が正しく動作しません。
そこで、XAMPPの設定を変更してhttp://slim3.localhost/
でpublic
ディレクトリを見るように変更しましょう。
XAMPPのディレクトリから、\apache\conf\extra\httpd-vhosts.conf
を編集します。
こんなのをファイル末尾に追加し、保存します。
<VirtualHost *:80>
DocumentRoot "{今回作成したpublicのパス}"
ServerName slim3.localhost
</VirtualHost>
例)自分だったらDocumentRoot
の値が"P:/xampp/htdocs/slim3/public"
とかになります。
次にhostsを編集します。
管理者権限でメモ帳を開き、C:\Windows\System32\drivers\etc\hosts
を編集
こんなのをファイル末尾に追加し、保存します。
127.0.0.1 slim3.localhost
そしてXAMPPのapacheを再起動、準備は完了です。
publicディレクトリにindex.phpファイルを新規作成
<?php echo "HelloWorld";
HelloWorldは表示されましたか?
ただ、まだコレはSlimの機能を利用していないです。正しくドキュメントのルートが設定できているかの確認です。
何はともあれHelloWorld(Slim3を利用する)
次はSlim3の機能を利用して、HelloWorld
のWorld
の箇所を動的に変えられるようにしてみましょう。
まずは.htaccess
ファイルを作成し、すべてのリクエスト(URL)をindex.phpで処理してくれるようにしましょう(URLルーティングとかいう)。
コレをpublic
ディレクトリに.htaccess
という名前で作成
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
次にindex.php
を下記ソースコードに書き換え
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
//composerで追加したパッケージを一括でインポートしてくれる
require __DIR__. "/../vendor/autoload.php";
//インスタンス作成
$app = new \Slim\App;
//http://localhost/{適当な文字列が$argsのnameというkeyにvalueが格納される}
$app->get('/[{name}]', function ($request, $response, $args) {
$name = isset($args['name']) ? $args['name'] : "World" ;
$response->getBody()->write("Hello{$name}");
return $response;
});
$app->run();
実際にlocalhost/{適当な文字列}
でアクセスしてみましょう。
実際にWorld
のところを出し分けできたと思います。
コレを利用すればいろいろできそうな気がしてきませんか?
あと、とてもシンプルだなと個人的には思っています。
次回は$app->get('/[{name}]',
の部分(urlルーティング、リクエストの振り分け・フィルタリング)のお話をしようと思います。
それでわっ。