SlimをApacheで実行すると"Not found"例外が発生する【PHP】
Slimフレームワーク公式(Slim Framework - Slim Framework)に則ってSlim4でプロジェクトを作成したはずが、いざApacheで実行すると"Not found"例外が発生してしまった。
手順
手順としてはざっくり以下の通り。
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);
ベースになるパスはここですと指定するコードです。 指定すると以下のように値がセットされます。
ちゃんとHelloWorldが表示されました。
リンク