Skip to content

Commit 4ccd84b

Browse files
Merge pull request #19765 from MauricioFauth/lazy-load-middleware
Lazy-load middleware in QueueRequestHandler
2 parents cf69328 + b43504a commit 4ccd84b

10 files changed

Lines changed: 391 additions & 156 deletions

File tree

app/services.php

Lines changed: 100 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
use PhpMyAdmin\FileListing;
2828
use PhpMyAdmin\FlashMessenger;
2929
use PhpMyAdmin\Http\Factory\ResponseFactory;
30+
use PhpMyAdmin\Http\Middleware;
3031
use PhpMyAdmin\Import\Import;
3132
use PhpMyAdmin\Import\SimulateDml;
3233
use PhpMyAdmin\InsertEdit;
@@ -69,16 +70,7 @@
6970
'class' => Advisor::class,
7071
'arguments' => ['$dbi' => '@dbi', '$expression' => '@expression_language'],
7172
],
72-
Application::class => [
73-
'class' => Application::class,
74-
'arguments' => [
75-
'$errorHandler' => '@error_handler',
76-
'$config' => '@config',
77-
'$template' => '@template',
78-
'$responseFactory' => '@' . ResponseFactory::class,
79-
'$history' => '@history',
80-
],
81-
],
73+
Application::class => ['class' => Application::class, 'arguments' => ['@' . ResponseFactory::class]],
8274
'browse_foreigners' => [
8375
'class' => BrowseForeigners::class,
8476
'arguments' => ['@template', '@config', '@' . ThemeManager::class],
@@ -127,6 +119,104 @@
127119
'class' => InsertEdit::class,
128120
'arguments' => ['@dbi', '@relation', '@transformations', '@file_listing', '@template', '@config'],
129121
],
122+
Middleware\ErrorHandling::class => [
123+
'class' => Middleware\ErrorHandling::class,
124+
'arguments' => ['@error_handler'],
125+
],
126+
Middleware\OutputBuffering::class => ['class' => Middleware\OutputBuffering::class],
127+
Middleware\PhpExtensionsChecking::class => [
128+
'class' => Middleware\PhpExtensionsChecking::class,
129+
'arguments' => ['@template', '@' . ResponseFactory::class],
130+
],
131+
Middleware\ServerConfigurationChecking::class => [
132+
'class' => Middleware\ServerConfigurationChecking::class,
133+
'arguments' => ['@template', '@' . ResponseFactory::class],
134+
],
135+
Middleware\PhpSettingsConfiguration::class => ['class' => Middleware\PhpSettingsConfiguration::class],
136+
Middleware\RouteParsing::class => ['class' => Middleware\RouteParsing::class],
137+
Middleware\ConfigLoading::class => [
138+
'class' => Middleware\ConfigLoading::class,
139+
'arguments' => ['@config', '@template', '@' . ResponseFactory::class],
140+
],
141+
Middleware\UriSchemeUpdating::class => [
142+
'class' => Middleware\UriSchemeUpdating::class,
143+
'arguments' => ['@config'],
144+
],
145+
Middleware\SessionHandling::class => [
146+
'class' => Middleware\SessionHandling::class,
147+
'arguments' => ['@config', '@error_handler', '@template', '@' . ResponseFactory::class],
148+
],
149+
Middleware\EncryptedQueryParamsHandling::class => ['class' => Middleware\EncryptedQueryParamsHandling::class],
150+
Middleware\UrlParamsSetting::class => [
151+
'class' => Middleware\UrlParamsSetting::class,
152+
'arguments' => ['@config'],
153+
],
154+
Middleware\TokenRequestParamChecking::class => ['class' => Middleware\TokenRequestParamChecking::class],
155+
Middleware\DatabaseAndTableSetting::class => ['class' => Middleware\DatabaseAndTableSetting::class],
156+
Middleware\SqlQueryGlobalSetting::class => ['class' => Middleware\SqlQueryGlobalSetting::class],
157+
Middleware\LanguageLoading::class => ['class' => Middleware\LanguageLoading::class],
158+
Middleware\ConfigErrorAndPermissionChecking::class => [
159+
'class' => Middleware\ConfigErrorAndPermissionChecking::class,
160+
'arguments' => ['@config', '@template', '@' . ResponseFactory::class],
161+
],
162+
Middleware\RequestProblemChecking::class => [
163+
'class' => Middleware\RequestProblemChecking::class,
164+
'arguments' => ['@template', '@' . ResponseFactory::class],
165+
],
166+
Middleware\CurrentServerGlobalSetting::class => [
167+
'class' => Middleware\CurrentServerGlobalSetting::class,
168+
'arguments' => ['@config'],
169+
],
170+
Middleware\ThemeInitialization::class => ['class' => Middleware\ThemeInitialization::class],
171+
Middleware\UrlRedirection::class => [
172+
'class' => Middleware\UrlRedirection::class,
173+
'arguments' => ['@config', '@template', '@' . ResponseFactory::class],
174+
],
175+
Middleware\SetupPageRedirection::class => [
176+
'class' => Middleware\SetupPageRedirection::class,
177+
'arguments' => ['@config', '@' . ResponseFactory::class],
178+
],
179+
Middleware\MinimumCommonRedirection::class => [
180+
'class' => Middleware\MinimumCommonRedirection::class,
181+
'arguments' => ['@config', '@' . ResponseFactory::class],
182+
],
183+
Middleware\LanguageAndThemeCookieSaving::class => [
184+
'class' => Middleware\LanguageAndThemeCookieSaving::class,
185+
'arguments' => ['@config'],
186+
],
187+
Middleware\LoginCookieValiditySetting::class => [
188+
'class' => Middleware\LoginCookieValiditySetting::class,
189+
'arguments' => ['@config'],
190+
],
191+
Middleware\Authentication::class => [
192+
'class' => Middleware\Authentication::class,
193+
'arguments' => ['@config', '@template', '@' . ResponseFactory::class],
194+
],
195+
Middleware\DatabaseServerVersionChecking::class => [
196+
'class' => Middleware\DatabaseServerVersionChecking::class,
197+
'arguments' => ['@config', '@template', '@' . ResponseFactory::class],
198+
],
199+
Middleware\SqlDelimiterSetting::class => [
200+
'class' => Middleware\SqlDelimiterSetting::class,
201+
'arguments' => ['@config'],
202+
],
203+
Middleware\ResponseRendererLoading::class => [
204+
'class' => Middleware\ResponseRendererLoading::class,
205+
'arguments' => ['@config'],
206+
],
207+
Middleware\ProfilingChecking::class => ['class' => Middleware\ProfilingChecking::class],
208+
Middleware\UserPreferencesLoading::class => [
209+
'class' => Middleware\UserPreferencesLoading::class,
210+
'arguments' => ['@config'],
211+
],
212+
Middleware\RecentTableHandling::class => [
213+
'class' => Middleware\RecentTableHandling::class,
214+
'arguments' => ['@config'],
215+
],
216+
Middleware\StatementHistory::class => [
217+
'class' => Middleware\StatementHistory::class,
218+
'arguments' => ['@config', '@history'],
219+
],
130220
'navigation' => [
131221
'class' => Navigation::class,
132222
'arguments' => ['@template', '@relation', '@dbi', '@config'],

psalm-baseline.xml

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4947,17 +4947,93 @@
49474947
<code><![CDATA[Config::getInstance()]]></code>
49484948
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
49494949
</DeprecatedMethod>
4950+
<PossiblyUnusedMethod>
4951+
<code><![CDATA[__construct]]></code>
4952+
</PossiblyUnusedMethod>
4953+
</file>
4954+
<file src="src/Http/Middleware/ConfigErrorAndPermissionChecking.php">
4955+
<PossiblyUnusedMethod>
4956+
<code><![CDATA[__construct]]></code>
4957+
</PossiblyUnusedMethod>
4958+
</file>
4959+
<file src="src/Http/Middleware/ConfigLoading.php">
4960+
<PossiblyUnusedMethod>
4961+
<code><![CDATA[__construct]]></code>
4962+
</PossiblyUnusedMethod>
4963+
</file>
4964+
<file src="src/Http/Middleware/CurrentServerGlobalSetting.php">
4965+
<PossiblyUnusedMethod>
4966+
<code><![CDATA[__construct]]></code>
4967+
</PossiblyUnusedMethod>
49504968
</file>
49514969
<file src="src/Http/Middleware/DatabaseServerVersionChecking.php">
49524970
<DeprecatedMethod>
49534971
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
49544972
</DeprecatedMethod>
4973+
<PossiblyUnusedMethod>
4974+
<code><![CDATA[__construct]]></code>
4975+
</PossiblyUnusedMethod>
4976+
</file>
4977+
<file src="src/Http/Middleware/ErrorHandling.php">
4978+
<PossiblyUnusedMethod>
4979+
<code><![CDATA[__construct]]></code>
4980+
</PossiblyUnusedMethod>
4981+
</file>
4982+
<file src="src/Http/Middleware/LanguageAndThemeCookieSaving.php">
4983+
<PossiblyUnusedMethod>
4984+
<code><![CDATA[__construct]]></code>
4985+
</PossiblyUnusedMethod>
4986+
</file>
4987+
<file src="src/Http/Middleware/LoginCookieValiditySetting.php">
4988+
<PossiblyUnusedMethod>
4989+
<code><![CDATA[__construct]]></code>
4990+
</PossiblyUnusedMethod>
4991+
</file>
4992+
<file src="src/Http/Middleware/MinimumCommonRedirection.php">
4993+
<PossiblyUnusedMethod>
4994+
<code><![CDATA[__construct]]></code>
4995+
</PossiblyUnusedMethod>
4996+
</file>
4997+
<file src="src/Http/Middleware/PhpExtensionsChecking.php">
4998+
<PossiblyUnusedMethod>
4999+
<code><![CDATA[__construct]]></code>
5000+
</PossiblyUnusedMethod>
49555001
</file>
49565002
<file src="src/Http/Middleware/ProfilingChecking.php">
49575003
<DeprecatedMethod>
49585004
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
49595005
</DeprecatedMethod>
49605006
</file>
5007+
<file src="src/Http/Middleware/RequestProblemChecking.php">
5008+
<PossiblyUnusedMethod>
5009+
<code><![CDATA[__construct]]></code>
5010+
</PossiblyUnusedMethod>
5011+
</file>
5012+
<file src="src/Http/Middleware/ResponseRendererLoading.php">
5013+
<PossiblyUnusedMethod>
5014+
<code><![CDATA[__construct]]></code>
5015+
</PossiblyUnusedMethod>
5016+
</file>
5017+
<file src="src/Http/Middleware/ServerConfigurationChecking.php">
5018+
<PossiblyUnusedMethod>
5019+
<code><![CDATA[__construct]]></code>
5020+
</PossiblyUnusedMethod>
5021+
</file>
5022+
<file src="src/Http/Middleware/SessionHandling.php">
5023+
<PossiblyUnusedMethod>
5024+
<code><![CDATA[__construct]]></code>
5025+
</PossiblyUnusedMethod>
5026+
</file>
5027+
<file src="src/Http/Middleware/SetupPageRedirection.php">
5028+
<PossiblyUnusedMethod>
5029+
<code><![CDATA[__construct]]></code>
5030+
</PossiblyUnusedMethod>
5031+
</file>
5032+
<file src="src/Http/Middleware/SqlDelimiterSetting.php">
5033+
<PossiblyUnusedMethod>
5034+
<code><![CDATA[__construct]]></code>
5035+
</PossiblyUnusedMethod>
5036+
</file>
49615037
<file src="src/Http/Middleware/StatementHistory.php">
49625038
<DeprecatedMethod>
49635039
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
@@ -4971,6 +5047,21 @@
49715047
<code><![CDATA[$_SESSION[' PMA_token ']]]></code>
49725048
</MixedArgument>
49735049
</file>
5050+
<file src="src/Http/Middleware/UriSchemeUpdating.php">
5051+
<PossiblyUnusedMethod>
5052+
<code><![CDATA[__construct]]></code>
5053+
</PossiblyUnusedMethod>
5054+
</file>
5055+
<file src="src/Http/Middleware/UrlRedirection.php">
5056+
<PossiblyUnusedMethod>
5057+
<code><![CDATA[__construct]]></code>
5058+
</PossiblyUnusedMethod>
5059+
</file>
5060+
<file src="src/Http/Middleware/UserPreferencesLoading.php">
5061+
<PossiblyUnusedMethod>
5062+
<code><![CDATA[__construct]]></code>
5063+
</PossiblyUnusedMethod>
5064+
</file>
49745065
<file src="src/I18n/LanguageManager.php">
49755066
<DeprecatedMethod>
49765067
<code><![CDATA[Config::getInstance()]]></code>

src/Application.php

Lines changed: 39 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
use Fig\Http\Message\StatusCodeInterface;
88
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
99
use Laminas\HttpHandlerRunner\RequestHandlerRunner;
10-
use PhpMyAdmin\Console\History;
1110
use PhpMyAdmin\Container\ContainerBuilder;
12-
use PhpMyAdmin\Error\ErrorHandler;
1311
use PhpMyAdmin\Http\Factory\ResponseFactory;
1412
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
1513
use PhpMyAdmin\Http\Handler\ApplicationHandler;
@@ -53,71 +51,59 @@
5351
use Psr\Http\Message\ServerRequestInterface;
5452
use Throwable;
5553

54+
use function assert;
5655
use function sprintf;
5756

58-
class Application
57+
readonly class Application
5958
{
60-
public function __construct(
61-
private readonly ErrorHandler $errorHandler,
62-
private readonly Config $config,
63-
private readonly Template $template,
64-
private readonly ResponseFactory $responseFactory,
65-
private readonly History $history,
66-
) {
59+
public function __construct(private ResponseFactory $responseFactory)
60+
{
6761
}
6862

6963
public static function init(): self
7064
{
71-
/** @var Application $application */
7265
$application = ContainerBuilder::getContainer()->get(self::class);
66+
assert($application instanceof self);
7367

7468
return $application;
7569
}
7670

7771
public function run(bool $isSetupPage = false): void
7872
{
79-
$requestHandler = new QueueRequestHandler(new ApplicationHandler($this));
80-
$requestHandler->add(new ErrorHandling($this->errorHandler));
81-
$requestHandler->add(new OutputBuffering());
82-
$requestHandler->add(new PhpExtensionsChecking($this->template, $this->responseFactory));
83-
$requestHandler->add(new ServerConfigurationChecking($this->template, $this->responseFactory));
84-
$requestHandler->add(new PhpSettingsConfiguration());
85-
$requestHandler->add(new RouteParsing());
86-
$requestHandler->add(new ConfigLoading($this->config, $this->template, $this->responseFactory));
87-
$requestHandler->add(new UriSchemeUpdating($this->config));
88-
$requestHandler->add(new SessionHandling(
89-
$this->config,
90-
$this->errorHandler,
91-
$this->template,
92-
$this->responseFactory,
93-
));
94-
$requestHandler->add(new EncryptedQueryParamsHandling());
95-
$requestHandler->add(new UrlParamsSetting($this->config));
96-
$requestHandler->add(new TokenRequestParamChecking());
97-
$requestHandler->add(new DatabaseAndTableSetting());
98-
$requestHandler->add(new SqlQueryGlobalSetting());
99-
$requestHandler->add(new LanguageLoading());
100-
$requestHandler->add(new ConfigErrorAndPermissionChecking(
101-
$this->config,
102-
$this->template,
103-
$this->responseFactory,
104-
));
105-
$requestHandler->add(new RequestProblemChecking($this->template, $this->responseFactory));
106-
$requestHandler->add(new CurrentServerGlobalSetting($this->config));
107-
$requestHandler->add(new ThemeInitialization());
108-
$requestHandler->add(new UrlRedirection($this->config, $this->template, $this->responseFactory));
109-
$requestHandler->add(new SetupPageRedirection($this->config, $this->responseFactory));
110-
$requestHandler->add(new MinimumCommonRedirection($this->config, $this->responseFactory));
111-
$requestHandler->add(new LanguageAndThemeCookieSaving($this->config));
112-
$requestHandler->add(new LoginCookieValiditySetting($this->config));
113-
$requestHandler->add(new Authentication($this->config, $this->template, $this->responseFactory));
114-
$requestHandler->add(new DatabaseServerVersionChecking($this->config, $this->template, $this->responseFactory));
115-
$requestHandler->add(new SqlDelimiterSetting($this->config));
116-
$requestHandler->add(new ResponseRendererLoading($this->config));
117-
$requestHandler->add(new ProfilingChecking());
118-
$requestHandler->add(new UserPreferencesLoading($this->config));
119-
$requestHandler->add(new RecentTableHandling($this->config));
120-
$requestHandler->add(new StatementHistory($this->config, $this->history));
73+
$container = ContainerBuilder::getContainer();
74+
$requestHandler = new QueueRequestHandler($container, new ApplicationHandler($this));
75+
$requestHandler->add(ErrorHandling::class);
76+
$requestHandler->add(OutputBuffering::class);
77+
$requestHandler->add(PhpExtensionsChecking::class);
78+
$requestHandler->add(ServerConfigurationChecking::class);
79+
$requestHandler->add(PhpSettingsConfiguration::class);
80+
$requestHandler->add(RouteParsing::class);
81+
$requestHandler->add(ConfigLoading::class);
82+
$requestHandler->add(UriSchemeUpdating::class);
83+
$requestHandler->add(SessionHandling::class);
84+
$requestHandler->add(EncryptedQueryParamsHandling::class);
85+
$requestHandler->add(UrlParamsSetting::class);
86+
$requestHandler->add(TokenRequestParamChecking::class);
87+
$requestHandler->add(DatabaseAndTableSetting::class);
88+
$requestHandler->add(SqlQueryGlobalSetting::class);
89+
$requestHandler->add(LanguageLoading::class);
90+
$requestHandler->add(ConfigErrorAndPermissionChecking::class);
91+
$requestHandler->add(RequestProblemChecking::class);
92+
$requestHandler->add(CurrentServerGlobalSetting::class);
93+
$requestHandler->add(ThemeInitialization::class);
94+
$requestHandler->add(UrlRedirection::class);
95+
$requestHandler->add(SetupPageRedirection::class);
96+
$requestHandler->add(MinimumCommonRedirection::class);
97+
$requestHandler->add(LanguageAndThemeCookieSaving::class);
98+
$requestHandler->add(LoginCookieValiditySetting::class);
99+
$requestHandler->add(Authentication::class);
100+
$requestHandler->add(DatabaseServerVersionChecking::class);
101+
$requestHandler->add(SqlDelimiterSetting::class);
102+
$requestHandler->add(ResponseRendererLoading::class);
103+
$requestHandler->add(ProfilingChecking::class);
104+
$requestHandler->add(UserPreferencesLoading::class);
105+
$requestHandler->add(RecentTableHandling::class);
106+
$requestHandler->add(StatementHistory::class);
121107

122108
$runner = new RequestHandlerRunner(
123109
$requestHandler,

0 commit comments

Comments
 (0)