slim frameworkで単純なAPIを作成しています。要求のあるスリムパス属性
ミドルウェアを作成して、アプリケーションに渡されたトークンが有効で有効期限が切れていないかどうかを確認したいと考えました。
これはミドルウェアです:
public function __invoke(Request $request, Response $response, $next)
{
$token = $request->getParam('token', null);
if (is_null($token)) {
throw new NoTokenException();
}
/** @var Auth $authModule */
$authModule = $this->getContainer()->get('AuthModule');
$tokenModel = $authModule->validateToken($token);
$request = $request->withAttribute('user_token_data', $tokenModel->getAttributes());
return $next($request, $response);
}
それはかなり簡単です。トークンを検証し、新しい属性を$ requestパラメータに追加します。
私は次のことをやった私のルートで:ルートのコールバックで
$app->post('/test', function($request, $response, $args){
/** @var \Controller\TestController $testController */
$testController = $this->get('TestController');
$testController->testFunction();
})->add(new \Middleware\Test\SomeOtheroMiddleware($app->getContainer()))
->add(new \Middleware\AuthMiddleware($app->getContainer()));
私がしなければ$request->getAttribute('user_token_data')
、すべての場所です。
__constructor()
で$request
変数の上に渡したいが、私のコンテナです:
$container['TestController'] = function ($container) {
$testModule = $container->get('TestModule');
$request = $container->get('request');
return new \Controller\TestController($testModule, $container, $request);
};
すべては、エラーをロードしていないですが、中私のTestController->testFunction()
私がコンテナを渡した変数$request
にアクセスしようとすると、私はuser_token_data
キーを持っていません。
コントローラのセッターを作成してルート内の$request
を変更することはできますが、これは良い考えのようには聞こえません。
私はコンテナからの$request
が同じインスタンスではないことを知りたいと思います。そして、私はセッターなしでこれをどうやって行うことができますか?
ご協力いただければ幸いです。
コンテナからのリクエストは使用しないでください。失効したデータが含まれています。 –
@MikaTuupolaあなたは何をお勧めしますか? –