4

PSR-7はまもなく標準化される予定です (私は信じています)。PhlyStackPHPConnectJSで使用されるミドルウェアについて考えさせられました。

ConnectJS の仕組みは、ミドルウェアが何かを追加する必要があるときにリクエスト オブジェクトを変更することです。たとえば、cookie-sessionはオブジェクトにsessionプロパティを作成します。req

app.use(session({
  keys: ['key1', 'key2']
}))

app.use(function (req, res, next) {
  var n = req.session.views || 0 // <-- req.session is managed by the session middleware
  req.session.views = ++n 
  res.end(n + ' views')
})

PSR-7 では、Request オブジェクトと Response オブジェクトの両方が不変である (と思われる) ため、このような追加データをどのように渡す必要があるのでしょうか? つまり、認証ミドルウェアによって作成された「セッション」オブジェクトまたは「ユーザー」オブジェクトを格納するのに最適な場所はどこでしょうか?

4

2 に答える 2

3

PSR-7 の要求オブジェクトと応答オブジェクトは値オブジェクトとして実装されるため、不変です。

別のオブジェクトが必要になるたびに、前のインスタンスから新しいインスタンスを作成します。

$newRequest = $oldRequest->withMethod('GET');

その時点から、新しいインスタンスを使用します。

next()ミドルウェアでは、次のミドルウェアを呼び出す関数に新しいインスタンスを渡す必要があります(たとえば、こちらを参照)。

現在のリクエストから計算された追加データをリクエスト オブジェクトに保存する必要がある場合は、正確にそれを実行できる と メソッドがServerRequestInterface定義されています。withAttributewithAttributes

これの一般的な使用例は、ルーティングの結果を保存することですが、それらを使用して、セッションやユーザー データなど、リクエストの他の追加データを保存することもできます。

于 2015-03-10T18:10:50.973 に答える
-1

絶対に保管しないでください。それをパラメーターとしてコンシューマー関数に挿入します。例えば:

function doSomething(reqest, response, session, user, foo, bar, ...)

明確にしてください。

于 2015-05-30T13:04:52.317 に答える