1. http_kato83

    No comment

    http_kato83
Changes in body
Source | HTML | Preview
@@ -1,138 +1,138 @@
# 目次
[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ルーティング、リクエストの振り分け・フィルタリング)のお話をしようと思います。
それでわっ。