1. http_kato83

    Posted

    http_kato83
Changes in title
+PHPのSlim3でサクッとHelloWorldを表示させてみよう(使い方)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +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)
+- 次回
+ - 未作成
+
+# 何はともあれ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ルーティング、リクエストの振り分け・フィルタリング)のお話をしようと思います。
+
+それでわっ。