6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Slim3_PHPAdvent Calendar 2018

Day 3

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

Last updated at Posted at 2018-12-24

目次

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";

image.png

HelloWorldは表示されましたか?

ただ、まだコレはSlimの機能を利用していないです。正しくドキュメントのルートが設定できているかの確認です。

何はともあれHelloWorld(Slim3を利用する)

次はSlim3の機能を利用して、HelloWorldWorldの箇所を動的に変えられるようにしてみましょう。

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

image.png

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

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

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

それでわっ。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?