PHP Slim3フレームワークのサンプルアプリを作ろう（2-1. First Application Walkthrough Getting Set Upまで）

# はじめに
PHP Slim3フレームワークの勉強のため、
Slim公式のユーザーガイドにある[First Application Walkthrough](https://www.slimframework.com/docs/v3/tutorial/first-app.html#run-your-application-with-phps-webserver)のサンプルアプリを作成します。
まずは、ビルトインWebサーバーで表示させるところまで。

今回は、[skeleton project](https://qiita.com/erik_t/items/23cc9df2154e80aa137e)を使用しないバージョンです。

# 前提
下記記事で構築した環境を前提とします。

- Windows10にVagrantをを入れてCentOS7をインストールしよう([1](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)、[2](https://qiita.com/erik_t/items/909efb63fd389f486ec3)、[3](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)、[4](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)、[5](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)、[6](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)) 
- ローカルでLAMP環境を構築しよう（[0](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)、[1](https://qiita.com/erik_t/items/e36235896b327f5cb461)、[2](https://qiita.com/erik_t/items/8dc3f2a5e8e8c9376e27)、[3](https://qiita.com/erik_t/items/617503557020a4a6ba82)、[4](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)）
- [CentOS7にComposerをインストールしよう](https://qiita.com/erik_t/items/0b3492f38f6cd8605a4c)

# 使用ツール
- Tera Term

# 手順
[1. 専用のユーザーを作成](https://qiita.com/erik_t/items/9e9f6c93d2403ac90242#1-%E5%B0%82%E7%94%A8%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90)
[2. プロジェクトディレクトリを作成](https://qiita.com/erik_t/items/9e9f6c93d2403ac90242#2-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90)
[3. Slim Frameworkをインストール](https://qiita.com/erik_t/items/9e9f6c93d2403ac90242#3-slim-framework%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
[4. アプリケーションを作成](https://qiita.com/erik_t/items/9e9f6c93d2403ac90242#4-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90)
[5. アプリケーションを動作させてみる](https://qiita.com/erik_t/items/9e9f6c93d2403ac90242#5-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%81%A6%E3%81%BF%E3%82%8B)

# やってみよう
## 1. 専用のユーザーを作成
[前回の記事](https://qiita.com/erik_t/items/23cc9df2154e80aa137e)と同じ環境で行う方はこの工程はスルーでOKです。

Composerを`root`ユーザーで操作することは推奨されていないので、
以下のコマンドで`slimuser`というユーザーを作成します。

```
useradd slimuser
```
作成した`slimuser`に以下のコマンドで切り替えます。

```
su slimuser
```
## 2. プロジェクトディレクトリを作成
slimuserユーザーが作成されると
`/home/`ディレクトリ内に`slimuser`ディレクトリが作成されます。
その中に以下のプロジェクトディレクトリを作成します。

```
/home/slimuser/projects/slim/FirstApplication
```

FirstApplicationの下に以下のようにディレクトリを作成します。
必ずしもこのディレクトリ構造ではなくてもいいようですが、
今回はユーザーガイドに倣います。

```
.
├── FirstApplication
│   └── src
│       └── public
```
## 3. Slim Frameworkをインストール
上記で作成した`src`ディレクトリまで移動します。

```
cd /home/slimuser/projects/slim/FirstApplication/src
```
以下のコマンドを実行します。

```
composer require slim/slim:3.*
```
`src`ディレクトリ内には以下のようなファイル群が生成されます。

```
[slimuser@localhost src]$ ls -la
total 16
drwxrwxr-x 4 slimuser slimuser   76 Jun  1 00:30 .
drwxrwxr-x 3 slimuser slimuser   17 Jun  1 00:28 ..
-rw-rw-r-- 1 slimuser slimuser   54 Jun  1 00:30 composer.json
-rw-rw-r-- 1 slimuser slimuser 9700 Jun  1 00:30 composer.lock
drwxrwxr-x 2 slimuser slimuser   23 Jun  1 01:10 public
drwxrwxr-x 7 slimuser slimuser   92 Jun  1 00:30 vendor
```

## 4. アプリケーションを作成
`src`ディレクトリの下の`public`ディレクトリに、`index.php`ファイルを作成します。

```
vi public/index.php
```

以下のように記述してください。
[First Application Walkthrough](https://www.slimframework.com/docs/v3/tutorial/first-app.html#run-your-application-with-phps-webserver)では、
5行目を`require '../vendor/autoload.php';`と記述していましたが、
同じようにするとなぜかエラーが出てしまったので、
`require '/home/slimuser/projects/slim/FirstApplication/src/vendor/autoload.php';`
のようにフルパスで記述しました。

```:index.php
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '/home/slimuser/projects/slim/FirstApplication/src/vendor/autoload.php';

$app = new \Slim\App;
$app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
    $name = $args['name'];
    $response->getBody()->write("Hello, $name");

    return $response;
});
$app->run();
```
## 5. アプリケーションを動作させてみる
今回は、PHPのビルトインWebサーバーを使用して表示します。
以下のコマンドを実行します。
`192.168.33.60`部分は各自の環境に置き換えてください。

```
php -S 192.168.33.60:8080 -t public public/index.php
```
下記が表示されたらブラウザで`http://192.168.33.60:8080/hello/world`を開いてみてください。

```
[slimuser@localhost src]$ php -S 192.168.33.60:8080 -t public public/index.php
PHP 7.1.33 Development Server started at Mon Jun  1 02:01:37 2020
Listening on http://192.168.33.60:8080
Document root is /home/slimuser/projects/slim/FirstApplication/src/public
Press Ctrl-C to quit.
```

"Hello, world"と表示されました。

![firstApplication1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/72cd5149-0c6b-179f-cca1-ca6263f20e27.png)

"world"を"cat"に書き換えて表示すると、表示が変わります。
`http://192.168.33.60:8080/hello/cat`

![firstApplication2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/ba4979a9-8e44-08c7-b5b9-8aeab9430873.png)

# 補足
PHPのビルトインWebサーバーではなく、apacheを使用する手順については、
PHP Slim3フレームワークのサンプルアプリをApacheで動かそう([1](https://qiita.com/erik_t/items/20e93326d66d943dcb36)、[2](https://qiita.com/erik_t/items/91addfbd9cb44676d281)、[3](https://qiita.com/erik_t/items/608ef6c060efc6162400))を参照してください。

# 参考サイト
[First Application Walkthrough](https://www.slimframework.com/docs/v3/tutorial/first-app.html#run-your-application-with-phps-webserver)

# 関連ページ
## Windows10にVagrantをを入れてCentOS7をインストールしよう
[1. VagrantインストールからVagrantfileを設置まで](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)
[2. 仮想マシンの操作](https://qiita.com/erik_t/items/909efb63fd389f486ec3)
[3. WinSCP、Tera Termに秘密鍵でログイン ](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)
[4. WinSCP、Tera Termにrootユーザーでパスワードログイン](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)
[5. zip/unzipをインストール](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)
[6. Vagrantにて仮想環境を配布](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)

## ローカルでLAMP環境を構築しよう
[0. 事前準備](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)
[1. Apacheをインストール](https://qiita.com/erik_t/items/e36235896b327f5cb461)
[2. MySQLをインストール](https://qiita.com/erik_t/items/8dc3f2a5e8e8c9376e27)
[3. PHPをインストール](https://qiita.com/erik_t/items/617503557020a4a6ba82)
[4. ファイアウォールとか停止する](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)

## Composerをインストール
[CentOS7にComposerをインストールしよう](https://qiita.com/erik_t/items/0b3492f38f6cd8605a4c)

## PHP Slim3フレームワークのサンプルアプリを作ろう
[1. skeleton project](https://qiita.com/erik_t/items/23cc9df2154e80aa137e)
2-1. First Application Walkthrough Getting Set Upまで

## PHP Slim3フレームワークのサンプルアプリをApacheで動かそう
[1. VirtualHost使用](https://qiita.com/erik_t/items/20e93326d66d943dcb36)
[2. DocumentRoot使用](https://qiita.com/erik_t/items/91addfbd9cb44676d281)
[3. Alias使用](https://qiita.com/erik_t/items/608ef6c060efc6162400)