メインメニュー
XAMPP アレンジ
IED
WSL2
-
道具箱
リポジトリ編
フレームワーク編
公開ソフトウェア
メタ
リンク
- PHP ライブラリ
- PHP 言語
slim:4:cookbook目次
文書の過去の版を表示しています。
Slim4 クックブック
Version 4.5.0
— y2sunlight 2020-09-23
関連記事
- Slim4 クックブック
本章は以下のサイトの Cook book のセクションを翻訳し若干の補足を加えたのもです。
Trailing / in route patterns
Slim treats a URL pattern with a trailing slash as different to one without. That is,
/user
and/user/
are different and so can have different callbacks attached.For GET requests a permanent redirect is fine, but for other request methods like POST or PUT the browser will send the second request with the GET method. To avoid this you simply need to remove the trailing slash and pass the manipulated url to the next middleware.
If you want to redirect/rewrite all URLs that end in a
/
to the non-trailing/
equivalent, then you can add this middleware:Slimは、末尾にスラッシュがあるURLパターンを、ないものとは異なるものとして扱います。 つまり、
/user
と/user/
は異なるため、異なるコールバックをアタッチできます。GETリクエストの場合、永続的なリダイレクトは問題ありませんが、POSTやPUTなどの他のリクエストメソッドの場合、ブラウザはGETメソッドを使用して2番目のリクエストを送信します。 これを回避するには、末尾のスラッシュを削除し、操作されたURLを次のミドルウェアに渡す必要があります。
/
で終わるすべてのURLを、末尾以外の/
に相当するものにリダイレクト/書き換える場合は、次のミドルウェアを追加できます。<?php use Psr\Http\Message\RequestInterface as Request; use Psr\Http\Server\RequestHandlerInterface RequestHandler; use Slim\Factory\AppFactory; use Slim\Psr7\Response; require __DIR__ . '/../vendor/autoload.php'; $app = AppFactory::create(); $app->add(function (Request $request, RequestHandler $handler) { $uri = $request->getUri(); $path = $uri->getPath(); if ($path != '/' && substr($path, -1) == '/') { // recursively remove slashes when its more than 1 slash $path = rtrim($path, '/'); // permanently redirect paths with a trailing slash // to their non-trailing counterpart $uri = $uri->withPath($path); if ($request->getMethod() == 'GET') { $response = new Response(); return $response ->withHeader('Location', (string) $uri) ->withStatus(301); } else { $request = $request->withUri($uri); } } return $handler->handle($request); });
Alternatively, consider middlewares/trailing-slash middleware which also allows you to force a trailing slash to be appended to all URLs:
または、middlewares/trailing-slash ミドルウェアを検討してください。これにより、すべてのURLに末尾のスラッシュを強制的に追加することもできます。
use Middlewares\TrailingSlash; $app->add(new TrailingSlash(true)); // true adds the trailing slash (false removes it)
Retrieving Current Route
Setting up CORS
The simple solution
Access-Control-Allow-Methods
Access-Control-Allow-Credentials
Uploading files using POST forms
slim/4/cookbook.1602206325.txt.gz · 最終更新: 2020/10/09 10:18 by y2sunlight
コメント