PHPのSlim3でサクッとHelloWorldを表示させてみよう（使い方）

# 目次

[Slim3_PHP Advent Calendar 2018](https://qiita.com/advent-calendar/2018/slim3_php)
こちらから順番に追えます。

- 前回
    - [人生初のphpフレームワークでボクがLaravelでなくSlim3を選択した理由](https://qiita.com/http_kato83/items/71b1c80ff53d9095461a)
- 次回
    - [PHPのSlim3のリクエストオブジェクト・URLルーティング書き方まとめ](https://qiita.com/http_kato83/items/39451682092a7025e5fe)

# 何はともあれ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
<?php echo "HelloWorld";
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/158800/b47b2828-6b60-94f3-7401-a14530167878.png)

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
<?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/{適当な文字列}`でアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/158800/633dc429-e341-52d1-68a6-db28741a5366.png)

実際に`World`のところを出し分けできたと思います。  
コレを利用すればいろいろできそうな気がしてきませんか？

あと、とてもシンプルだなと個人的には思っています。

次回は`$app->get('/[{name}]',`の部分（urlルーティング、リクエストの振り分け・フィルタリング）のお話をしようと思います。

それでわっ。