Lv1プログラマの誰得メモ

総務女子の趣味とか勉強に関係することのメモ

SlimをApacheで実行すると"Not found"例外が発生する【PHP】

Slimフレームワーク公式(Slim Framework - Slim Framework)に則ってSlim4でプロジェクトを作成したはずが、いざApacheで実行すると"Not found"例外が発生してしまった。

f:id:megsan:20220213170652p:plain

手順

手順としてはざっくり以下の通り。

1.Composerで本体をインストール

 composer require slim/slim

2.PSR-7インストール

composer require slim/psr7

3.public/index.php の作成

<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->run();

ディレクトリ構成は以下のようになった。

slim4sample\
├ public\
│  └ index.php
├ vendor\
│  └ 省略
├ composer.json
└ composer.lock

解決方法

実はstack overflowに同じようなQAが載ってました。 stackoverflow.com

簡単な解決方法としては以下のコードを index.php の9行目あたりに追記するだけ。

$basePath = str_replace('/' . basename(__FILE__), '', $_SERVER['SCRIPT_NAME']);
$app = $app->setBasePath($basePath);

ベースになるパスはここですと指定するコードです。 指定すると以下のように値がセットされます。

f:id:megsan:20220213181422p:plain

ちゃんとHelloWorldが表示されました。 f:id:megsan:20220213182220p:plain