Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

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

目次

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ルーティング、リクエストの振り分け・フィルタリング)のお話をしようと思います。

それでわっ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?