From 7f045f691caafcaf5a71227c1528a940961874f9 Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Fri, 13 Mar 2026 21:21:37 +0400 Subject: [PATCH 1/7] Adding `declare(strict_types=1)` to all classes via rector --- rector.php | 4 ++ src/App/Adapters/AppAdapter.php | 2 + src/App/Adapters/ConsoleAppAdapter.php | 2 + src/App/Adapters/WebAppAdapter.php | 2 + src/App/App.php | 2 + src/App/Contracts/AppInterface.php | 2 + src/App/Enums/ExceptionMessages.php | 2 + src/App/Enums/ReservedKeys.php | 2 + src/App/Factories/AppFactory.php | 2 + src/App/Traits/AppTrait.php | 5 +- src/App/Traits/ConsoleAppTrait.php | 2 + src/App/Traits/WebAppTrait.php | 6 ++- src/Archive/Adapters/PharAdapter.php | 2 + src/Archive/Adapters/ZipAdapter.php | 2 + src/Archive/Archive.php | 2 + src/Archive/Contracts/ArchiveInterface.php | 2 + src/Archive/Enums/ExceptionMessages.php | 2 + src/Archive/Factories/ArchiveFactory.php | 2 + src/Asset/Asset.php | 2 + src/Asset/AssetManager.php | 2 + src/Asset/Enums/ExceptionMessages.php | 2 + src/Auth/Adapters/JwtAuthAdapter.php | 2 + src/Auth/Adapters/SessionAuthAdapter.php | 2 + src/Auth/Auth.php | 2 + src/Auth/Contracts/AuthServiceInterface.php | 2 + .../Contracts/AuthenticatableInterface.php | 2 + src/Auth/Enums/AuthKeys.php | 2 + src/Auth/Enums/ExceptionMessages.php | 2 + src/Auth/Factories/AuthFactory.php | 2 + src/Auth/Traits/AuthTrait.php | 2 + src/Auth/User.php | 2 + src/Cache/Adapters/DatabaseAdapter.php | 2 + src/Cache/Adapters/FileAdapter.php | 2 + src/Cache/Adapters/MemcachedAdapter.php | 2 + src/Cache/Adapters/RedisAdapter.php | 2 + src/Cache/Cache.php | 2 + src/Cache/Enums/ExceptionMessages.php | 2 + src/Cache/Factories/CacheFactory.php | 2 + src/Captcha/Adapters/HcaptchaAdapter.php | 2 + src/Captcha/Adapters/RecaptchaAdapter.php | 2 + src/Captcha/Captcha.php | 2 + src/Captcha/Contracts/CaptchaInterface.php | 2 + src/Captcha/Factories/CaptchaFactory.php | 4 +- src/Captcha/Traits/CaptchaTrait.php | 2 + src/Config/Config.php | 2 + src/Config/Enums/ExceptionMessages.php | 2 + src/Console/CommandDiscovery.php | 2 + src/Console/Commands/CronRunCommand.php | 2 + src/Console/Commands/DebugBarCommand.php | 2 + src/Console/Commands/EnvCommand.php | 2 + .../Commands/InstallToolkitCommand.php | 2 + src/Console/Commands/KeyGenerateCommand.php | 2 + .../Commands/MigrationGenerateCommand.php | 2 + .../Commands/MigrationMigrateCommand.php | 2 + .../Commands/ModuleGenerateCommand.php | 2 + src/Console/Commands/OpenApiCommand.php | 2 + .../Commands/ResourceCacheClearCommand.php | 2 + src/Console/Commands/RouteListCommand.php | 2 + src/Console/Commands/ServeCommand.php | 2 + src/Console/Commands/VersionCommand.php | 2 + src/Console/Contracts/CommandInterface.php | 2 + src/Console/QtCommand.php | 2 + src/Contracts/StorageInterface.php | 2 + .../Contracts/CookieStorageInterface.php | 2 + src/Cookie/Cookie.php | 2 + src/Cron/Contracts/CronTaskInterface.php | 2 + src/Cron/CronLock.php | 2 + src/Cron/CronManager.php | 2 + src/Cron/CronTask.php | 2 + src/Cron/Enums/ExceptionMessages.php | 2 + src/Cron/Exceptions/CronException.php | 2 + src/Cron/Schedule.php | 2 + src/Csrf/Csrf.php | 2 + src/Csrf/Enums/ExceptionMessages.php | 2 + src/Database/Adapters/Idiorm/IdiormDbal.php | 2 + src/Database/Adapters/Idiorm/IdiormPatch.php | 2 + .../Adapters/Idiorm/Statements/Criteria.php | 2 + .../Adapters/Idiorm/Statements/Join.php | 2 + .../Adapters/Idiorm/Statements/Model.php | 2 + .../Adapters/Idiorm/Statements/Query.php | 2 + .../Adapters/Idiorm/Statements/Reducer.php | 2 + .../Adapters/Idiorm/Statements/Result.php | 2 + .../Idiorm/Statements/Transaction.php | 2 + src/Database/Adapters/Sleekdb/SleekDbal.php | 2 + .../Adapters/Sleekdb/Statements/Criteria.php | 2 + .../Adapters/Sleekdb/Statements/Join.php | 2 + .../Adapters/Sleekdb/Statements/Model.php | 2 + .../Adapters/Sleekdb/Statements/Reducer.php | 2 + .../Adapters/Sleekdb/Statements/Result.php | 2 + src/Database/Contracts/DbalInterface.php | 2 + .../Contracts/RelationalInterface.php | 2 + src/Database/Database.php | 2 + src/Database/Enums/ExceptionMessages.php | 2 + src/Database/Enums/Key.php | 2 + src/Database/Enums/Relation.php | 2 + src/Database/Enums/Type.php | 2 + src/Database/Factories/TableFactory.php | 2 + src/Database/Schemas/Column.php | 2 + src/Database/Schemas/Table.php | 2 + src/Database/Traits/RelationalTrait.php | 2 + src/Database/Traits/TableTrait.php | 2 + src/Database/Traits/TransactionTrait.php | 2 + src/Debugger/Debugger.php | 2 + src/Debugger/DebuggerStore.php | 2 + src/Di/Di.php | 2 + src/Di/Enums/ExceptionMessages.php | 2 + .../Adapters/AsymmetricEncryptionAdapter.php | 2 + .../Adapters/SymmetricEncryptionAdapter.php | 2 + .../Contracts/EncryptionInterface.php | 2 + src/Encryption/Cryptor.php | 2 + src/Encryption/Enums/ExceptionMessages.php | 2 + src/Encryption/Factories/CryptorFactory.php | 2 + src/Environment/Enums/Env.php | 2 + src/Environment/Enums/ExceptionMessages.php | 2 + src/Environment/Environment.php | 4 +- src/Environment/Server.php | 10 +++- src/Hasher/Enums/ExceptionMessages.php | 2 + src/Hasher/Hasher.php | 2 + src/Hook/Enums/ExceptionMessages.php | 2 + src/Hook/HookManager.php | 2 + src/Http/Enums/ContentType.php | 2 + src/Http/Enums/StatusCode.php | 2 + src/Http/Request.php | 2 + src/Http/Request/HttpRequest.php | 2 + src/Http/Response.php | 2 + src/Http/Response/HttpResponse.php | 2 + src/Http/Traits/Request/Body.php | 2 + src/Http/Traits/Request/File.php | 2 + src/Http/Traits/Request/Header.php | 2 + src/Http/Traits/Request/Internal.php | 2 + src/Http/Traits/Request/Params.php | 2 + src/Http/Traits/Request/Query.php | 2 + src/Http/Traits/Request/RawInput.php | 2 + src/Http/Traits/Request/Route.php | 2 + src/Http/Traits/Request/Url.php | 2 + src/Http/Traits/Response/Body.php | 4 +- src/Http/Traits/Response/Header.php | 2 + src/Http/Traits/Response/Status.php | 2 + src/HttpClient/Enums/ExceptionMessages.php | 2 + src/HttpClient/HttpClient.php | 2 + src/Jwt/Enums/ExceptionMessages.php | 2 + src/Jwt/JwtToken.php | 2 + src/Lang/Enums/ExceptionMessages.php | 2 + src/Lang/Factories/LangFactory.php | 2 + src/Lang/Lang.php | 2 + src/Lang/Translator.php | 2 + src/Loader/Loader.php | 2 + src/Loader/Setup.php | 2 + src/Logger/Adapters/DailyAdapter.php | 2 + src/Logger/Adapters/MessageAdapter.php | 2 + src/Logger/Adapters/SingleAdapter.php | 2 + src/Logger/Contracts/ReportableInterface.php | 2 + src/Logger/Enums/ExceptionMessages.php | 2 + src/Logger/Factories/LoggerFactory.php | 2 + src/Logger/Logger.php | 2 + src/Logger/LoggerConfig.php | 2 + src/Logger/Traits/LoggerTrait.php | 2 + src/Mailer/Adapters/MailgunAdapter.php | 2 + src/Mailer/Adapters/MandrillAdapter.php | 2 + src/Mailer/Adapters/SendgridAdapter.php | 2 + src/Mailer/Adapters/SendinblueAdapter.php | 2 + src/Mailer/Adapters/SmtpAdapter.php | 2 + src/Mailer/Contracts/MailerInterface.php | 2 + src/Mailer/Factories/MailerFactory.php | 2 + src/Mailer/MailTrap.php | 2 + src/Mailer/Mailer.php | 2 + src/Mailer/Traits/MailerTrait.php | 2 + src/Middleware/Enums/ExceptionMessages.php | 2 + src/Middleware/MiddlewareManager.php | 2 + src/Middleware/QtMiddleware.php | 2 + src/Migration/Enums/ExceptionMessages.php | 2 + src/Migration/MigrationManager.php | 2 + src/Migration/MigrationTable.php | 2 + src/Migration/QtMigration.php | 2 + src/Migration/Templates/MigrationTemplate.php | 2 + src/Model/DbModel.php | 2 + src/Model/Enums/ExceptionMessages.php | 2 + src/Model/Factories/ModelFactory.php | 2 + src/Model/Model.php | 2 + src/Model/ModelCollection.php | 2 + src/Model/Traits/HasTimestamps.php | 2 + src/Model/Traits/SoftDeletes.php | 2 + src/Module/Enums/ExceptionMessages.php | 2 + src/Module/ModuleLoader.php | 2 + src/Module/ModuleManager.php | 2 + src/Paginator/Adapters/ArrayPaginator.php | 2 + src/Paginator/Adapters/ModelPaginator.php | 2 + .../Contracts/PaginatorInterface.php | 2 + src/Paginator/Enums/ExceptionMessages.php | 2 + src/Paginator/Enums/Pagination.php | 2 + src/Paginator/Factories/PaginatorFactory.php | 2 + src/Paginator/Paginator.php | 2 + src/Paginator/Traits/PaginatorTrait.php | 6 ++- src/Renderer/Adapters/HtmlAdapter.php | 2 + src/Renderer/Adapters/TwigAdapter.php | 2 + .../Contracts/TemplateRendererInterface.php | 2 + src/Renderer/Factories/RendererFactory.php | 2 + src/Renderer/Renderer.php | 2 + src/ResourceCache/ViewCache.php | 2 + src/Router/MatchedRoute.php | 2 + src/Router/PatternCompiler.php | 2 + src/Router/Route.php | 2 + src/Router/RouteBuilder.php | 2 + src/Router/RouteCollection.php | 2 + src/Router/RouteDispatcher.php | 2 + src/Router/RouteFinder.php | 2 + src/Service/Factories/ServiceFactory.php | 6 +++ src/Service/QtService.php | 2 + .../Adapters/Database/DatabaseHandler.php | 2 + .../Database/DatabaseSessionAdapter.php | 2 + .../Adapters/Native/NativeSessionAdapter.php | 2 + .../Contracts/SessionStorageInterface.php | 2 + src/Session/Enums/ExceptionMessages.php | 2 + src/Session/Factories/SessionFactory.php | 2 + src/Session/Session.php | 2 + src/Session/Traits/SessionTrait.php | 2 + src/Storage/Adapters/Dropbox/DropboxApp.php | 2 + .../Dropbox/DropboxFileSystemAdapter.php | 6 ++- .../Adapters/GoogleDrive/GoogleDriveApp.php | 2 + .../GoogleDriveFileSystemAdapter.php | 6 ++- .../Adapters/Local/LocalFileSystemAdapter.php | 6 ++- src/Storage/Contracts/CloudAppInterface.php | 2 + .../Contracts/FilesystemAdapterInterface.php | 6 ++- .../LocalFilesystemAdapterInterface.php | 2 + .../Contracts/TokenServiceInterface.php | 2 + src/Storage/Enums/ExceptionMessages.php | 2 + src/Storage/Factories/FileSystemFactory.php | 2 + src/Storage/FileSystem.php | 2 + src/Storage/Traits/CloudAppTrait.php | 2 + src/Storage/UploadedFile.php | 2 + src/Tracer/ErrorHandler.php | 2 + .../Contracts/TransformerInterface.php | 2 + src/Transformer/Helpers/transformer.php | 2 + src/Transformer/Transformer.php | 2 + src/Validation/Rule.php | 2 + src/Validation/Traits/File.php | 2 + src/Validation/Traits/General.php | 47 +++++++++++-------- src/Validation/Traits/Length.php | 2 + src/Validation/Traits/Lists.php | 2 + src/Validation/Traits/Resource.php | 2 + src/Validation/Traits/Type.php | 28 ++++++----- src/Validation/Validator.php | 2 + src/View/Enums/ExceptionMessages.php | 2 + src/View/Factories/ViewFactory.php | 2 + src/View/Helpers/view.php | 4 +- src/View/QtView.php | 2 + src/View/RawParam.php | 2 + .../Traits/Request/HttpRequestQueryTest.php | 2 +- 248 files changed, 564 insertions(+), 52 deletions(-) diff --git a/rector.php b/rector.php index 73ca57400..9a9ffea44 100644 --- a/rector.php +++ b/rector.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use Rector\TypeDeclaration\Rector\StmtsAwareInterface\DeclareStrictTypesRector; use Rector\TypeDeclaration\Rector\ClassMethod\StrictStringParamConcatRector; use Rector\Set\ValueObject\LevelSetList; use Rector\Set\ValueObject\SetList; @@ -15,6 +16,9 @@ LevelSetList::UP_TO_PHP_80, SetList::TYPE_DECLARATION, ]) + ->withRules([ + DeclareStrictTypesRector::class, + ]) ->withSkip([ StrictStringParamConcatRector::class => [ __DIR__ . '/src/Database/Adapters/Idiorm/Statements/Criteria.php', diff --git a/src/App/Adapters/AppAdapter.php b/src/App/Adapters/AppAdapter.php index ebf5a41de..db9cd43fa 100644 --- a/src/App/Adapters/AppAdapter.php +++ b/src/App/Adapters/AppAdapter.php @@ -1,5 +1,7 @@ get('cors') as $key => $value) { - $response->setHeader($key, $value); + $response->setHeader($key, (string) $value); } } } diff --git a/src/Archive/Adapters/PharAdapter.php b/src/Archive/Adapters/PharAdapter.php index 81bf5a722..163c7e3e1 100644 --- a/src/Archive/Adapters/PharAdapter.php +++ b/src/Archive/Adapters/PharAdapter.php @@ -1,5 +1,7 @@ get($envFilePath); $envFileContent = preg_replace('/^' . preg_quote($row, '/') . '/m', $key . '=' . $value, $envFileContent); - fs()->put($envFilePath, $envFileContent); + fs()->put($envFilePath, (string) $envFileContent); } else { fs()->append($envFilePath, PHP_EOL . $key . '=' . $value . PHP_EOL); } diff --git a/src/Environment/Server.php b/src/Environment/Server.php index 7f183cc1d..9dd0c6c7b 100644 --- a/src/Environment/Server.php +++ b/src/Environment/Server.php @@ -1,5 +1,7 @@ get('SERVER_PORT'); + $port = $this->get('SERVER_PORT'); + + if ($port === null) { + return null; + } + + return (string) $port; } public function contentType(bool $exact = false): ?string diff --git a/src/Hasher/Enums/ExceptionMessages.php b/src/Hasher/Enums/ExceptionMessages.php index 2d08717df..4721d90a6 100644 --- a/src/Hasher/Enums/ExceptionMessages.php +++ b/src/Hasher/Enums/ExceptionMessages.php @@ -1,5 +1,7 @@ addChild($tag, htmlspecialchars($value)); + $child = $simpleXML->addChild($tag, htmlspecialchars((string) $value)); if ($attributes) { foreach ($attributes as $attrKey => $attrVal) { diff --git a/src/Http/Traits/Response/Header.php b/src/Http/Traits/Response/Header.php index 05f425453..ea5f74e03 100644 --- a/src/Http/Traits/Response/Header.php +++ b/src/Http/Traits/Response/Header.php @@ -1,5 +1,7 @@ $serviceClass + * @return T * @throws BaseException * @throws DiException * @throws ReflectionException @@ -47,6 +50,9 @@ public static function get(string $serviceClass, array $args = []): QtService /** * Creates new service instance + * @template T of QtService + * @param class-string $serviceClass + * @return T * @throws BaseException * @throws DiException * @throws ReflectionException diff --git a/src/Service/QtService.php b/src/Service/QtService.php index 62351cf2f..f588a25b9 100644 --- a/src/Service/QtService.php +++ b/src/Service/QtService.php @@ -1,5 +1,7 @@ dropboxApp->contentRequest( @@ -90,7 +92,7 @@ public function put(string $filename, string $content, ?string $parentId = null) /** * @inheritDoc */ - public function append(string $filename, string $content) + public function append(string $filename, $content) { $fileContent = $this->get($filename); diff --git a/src/Storage/Adapters/GoogleDrive/GoogleDriveApp.php b/src/Storage/Adapters/GoogleDrive/GoogleDriveApp.php index 3fdf54a63..e91de5b8a 100644 --- a/src/Storage/Adapters/GoogleDrive/GoogleDriveApp.php +++ b/src/Storage/Adapters/GoogleDrive/GoogleDriveApp.php @@ -1,5 +1,7 @@ isFile($filename)) { @@ -110,7 +112,7 @@ public function put(string $filename, string $content, ?string $parentId = null) /** * @inheritDoc */ - public function append(string $filename, string $content) + public function append(string $filename, $content) { $fileContent = $this->get($filename); diff --git a/src/Storage/Adapters/Local/LocalFileSystemAdapter.php b/src/Storage/Adapters/Local/LocalFileSystemAdapter.php index 4c0c0b207..7d36837e4 100644 --- a/src/Storage/Adapters/Local/LocalFileSystemAdapter.php +++ b/src/Storage/Adapters/Local/LocalFileSystemAdapter.php @@ -1,5 +1,7 @@ 10, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, @@ -105,16 +109,17 @@ protected function iban(string $value): bool /** * Checks for a valid format human name */ - protected function name(string $value): bool + protected function name($value): bool { - return preg_match("/^([a-z \p{L} '-])+$/i", $value) === 1; + return preg_match("/^([a-z \p{L} '-])+$/i", (string) $value) === 1; } /** * Checks that the provided string is a likely street address. */ - protected function streetAddress(string $value): bool + protected function streetAddress($value): bool { + $value = (string) $value; $hasLetter = preg_match('/[a-zA-Z]/', $value); $hasDigit = preg_match('/\d/', $value); $hasSpace = preg_match('/\s/', $value); @@ -125,8 +130,9 @@ protected function streetAddress(string $value): bool /** * Validates the phone number // 555-555-5555 , 5555425555, 555 555 5555, 1(519) 555-4444, 1 (519) 555-4422, +1-555-555-5555 */ - protected function phoneNumber(string $value): bool + protected function phoneNumber($value): bool { + $value = (string) $value; $regex = '/^(\+*\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i'; return preg_match($regex, $value) === 1; @@ -135,8 +141,9 @@ protected function phoneNumber(string $value): bool /** * Determines if the provided input is a valid date */ - protected function date(string $value, ?string $format = null): bool + protected function date($value, ?string $format = null): bool { + $value = (string) $value; if (!$format) { $cdate1 = date('Y-m-d', strtotime($value)); $cdate2 = date('Y-m-d H:i:s', strtotime($value)); @@ -152,25 +159,25 @@ protected function date(string $value, ?string $format = null): bool /** * Ensures the value starts with a certain character / set of character */ - protected function starts(string $value, ?string $text = null): bool + protected function starts($value, ?string $text = null): bool { - return strpos($value, (string) $text) === 0; + return strpos((string) $value, (string) $text) === 0; } /** * Custom regex validator */ - protected function regex(string $value, string $pattern): bool + protected function regex($value, string $pattern): bool { - return preg_match($pattern, $value) === 1; + return preg_match($pattern, (string) $value) === 1; } /** * Validates JSON string */ - protected function jsonString(string $value): bool + protected function jsonString($value): bool { - $value = htmlspecialchars_decode($value, ENT_QUOTES); + $value = htmlspecialchars_decode((string) $value, ENT_QUOTES); return is_object(json_decode($value)); } @@ -178,7 +185,7 @@ protected function jsonString(string $value): bool /** * Validates same value for both fields */ - protected function same(string $value, string $otherField): bool + protected function same($value, string $otherField): bool { return $value == $this->data[$otherField]; } @@ -222,10 +229,10 @@ protected function exists($value, string $className, string $columnName): bool * @throws DiException * @throws ReflectionException */ - protected function captcha(string $value): bool + protected function captcha($value): bool { $captcha = CaptchaFactory::get(); - return $captcha->verify($value); + return $captcha->verify((string) $value); } } diff --git a/src/Validation/Traits/Length.php b/src/Validation/Traits/Length.php index b473110e8..720446986 100644 --- a/src/Validation/Traits/Length.php +++ b/src/Validation/Traits/Length.php @@ -1,5 +1,7 @@ = $minValue); } @@ -100,7 +102,7 @@ protected function minNumeric(string $value, $minValue): bool * Determines if the provided numeric value is higher to a specific value * @param $maxValue */ - protected function maxNumeric(string $value, $maxValue): bool + protected function maxNumeric($value, $maxValue): bool { return is_numeric($value) && is_numeric($maxValue) && ($value <= $maxValue); } diff --git a/src/Validation/Validator.php b/src/Validation/Validator.php index c51e63acb..cea8642fc 100644 --- a/src/Validation/Validator.php +++ b/src/Validation/Validator.php @@ -1,5 +1,7 @@ convertToHtml($content); + $html = (string) $converter->convertToHtml($content); if ($purifier instanceof HTMLPurifier) { return $purifier->purify($html); diff --git a/src/View/QtView.php b/src/View/QtView.php index 77cb42934..9fb08f3bc 100644 --- a/src/View/QtView.php +++ b/src/View/QtView.php @@ -1,5 +1,7 @@ setQueryParam('name', 'John'); - $request->setQueryParam('age', 36); + $request->setQueryParam('age', '36'); $this->assertEquals('John', $request->getQueryParam('name')); From 4fd83607e3f8571ac0c2db657b6a038b582d460e Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:24:34 +0400 Subject: [PATCH 2/7] Fix PHP 8+ TypeErrors in renderer and paginator --- src/Paginator/Traits/PaginatorTrait.php | 4 ++-- src/Renderer/Adapters/HtmlAdapter.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Paginator/Traits/PaginatorTrait.php b/src/Paginator/Traits/PaginatorTrait.php index c2fe4acb8..9337ca310 100644 --- a/src/Paginator/Traits/PaginatorTrait.php +++ b/src/Paginator/Traits/PaginatorTrait.php @@ -211,8 +211,8 @@ public function getPagination(bool $withBaseUrl = false, ?int $pageItemsCount = */ protected function getUri(bool $withBaseUrl = false): string { - $routeUrl = preg_replace('/([?&](page|per_page)=\d+)/', '', route_uri()); - $routeUrl = preg_replace('/&/', '?', $routeUrl, 1); + $routeUrl = preg_replace('/([?&](page|per_page)=\d+)/', '', route_uri() ?? ''); + $routeUrl = preg_replace('/&/', '?', $routeUrl ?? '', 1); $url = $routeUrl; if ($withBaseUrl) { diff --git a/src/Renderer/Adapters/HtmlAdapter.php b/src/Renderer/Adapters/HtmlAdapter.php index ad0c542e9..2d3ec00e8 100644 --- a/src/Renderer/Adapters/HtmlAdapter.php +++ b/src/Renderer/Adapters/HtmlAdapter.php @@ -50,7 +50,7 @@ public function __construct(?array $configs = []) /** * Renders the view - * @throws BaseException + * @throws BaseException|ReflectionException */ public function render(string $view, array $params = []): string { @@ -61,7 +61,7 @@ public function render(string $view, array $params = []): string } ob_start(); - ob_implicit_flush(0); + ob_implicit_flush(PHP_VERSION_ID >= 80000 ? false : 0); if ($params !== []) { extract($params); From 2667799ad73de627092ff7af9d2d322ac0029aaf Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:57:04 +0400 Subject: [PATCH 3/7] update Scrutinizer configuration with PHPUnit coverage, PHPCS, and coding style rules --- .scrutinizer.yml | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index d5270f5b0..d38278129 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -4,10 +4,33 @@ build: environment: php: version: 8.1 + ini: + xdebug.mode: coverage + dependencies: before: - curl -sS https://getcomposer.org/installer | php -- --install-dir=$HOME --filename=composer --2 - - $HOME/composer --version + - $HOME/composer install --no-interaction + tests: override: - - php-scrutinizer-run \ No newline at end of file + - php-scrutinizer-run + - command: vendor/bin/phpunit --coverage-clover=coverage.xml + coverage: + file: coverage.xml + format: clover + - command: phpcs-run + use_website_config: true + +filter: + excluded_paths: + - 'tests/*' + +checks: + php: true + +coding_style: + php: + spaces: + around_operators: + concatenation: true \ No newline at end of file From 7a5ff5a69a530efbcede88c893a7fc0dcdcbbfb2 Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:06:15 +0400 Subject: [PATCH 4/7] Adding redis and memcache in .scrutinizer.yml --- .scrutinizer.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index d38278129..d8621ae96 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -6,11 +6,16 @@ build: version: 8.1 ini: xdebug.mode: coverage + extensions: + - redis + - memcached dependencies: before: - curl -sS https://getcomposer.org/installer | php -- --install-dir=$HOME --filename=composer --2 - - $HOME/composer install --no-interaction + - $HOME/composer install --prefer-dist --no-interaction --no-progress + - sudo service redis-server start + - sudo service memcached start tests: override: @@ -24,7 +29,8 @@ build: filter: excluded_paths: - - 'tests/*' + - "tests/*" + - "vendor/*" checks: php: true From 50571f66c1f68e453dc539024311c0a224faf0f7 Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:10:09 +0400 Subject: [PATCH 5/7] Updating .scrutinizer.yml to include pecl_extensions for redis and memcached --- .scrutinizer.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index d8621ae96..2430212cb 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -6,7 +6,7 @@ build: version: 8.1 ini: xdebug.mode: coverage - extensions: + pecl_extensions: - redis - memcached @@ -20,10 +20,12 @@ build: tests: override: - php-scrutinizer-run + - command: vendor/bin/phpunit --coverage-clover=coverage.xml coverage: file: coverage.xml format: clover + - command: phpcs-run use_website_config: true From ced552cb3aa7852eb37997910ca1ff2863306cba Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:42:44 +0400 Subject: [PATCH 6/7] Updating .scrutinizer.yml --- .scrutinizer.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index 2430212cb..b192b905b 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -14,8 +14,6 @@ build: before: - curl -sS https://getcomposer.org/installer | php -- --install-dir=$HOME --filename=composer --2 - $HOME/composer install --prefer-dist --no-interaction --no-progress - - sudo service redis-server start - - sudo service memcached start tests: override: From 731a79e6b593a26e4cb4c2986c542cc73c07d763 Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:56:05 +0400 Subject: [PATCH 7/7] Reverting .scrutinizer.yml changes --- .scrutinizer.yml | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index b192b905b..d5270f5b0 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -4,39 +4,10 @@ build: environment: php: version: 8.1 - ini: - xdebug.mode: coverage - pecl_extensions: - - redis - - memcached - dependencies: before: - curl -sS https://getcomposer.org/installer | php -- --install-dir=$HOME --filename=composer --2 - - $HOME/composer install --prefer-dist --no-interaction --no-progress - + - $HOME/composer --version tests: override: - - php-scrutinizer-run - - - command: vendor/bin/phpunit --coverage-clover=coverage.xml - coverage: - file: coverage.xml - format: clover - - - command: phpcs-run - use_website_config: true - -filter: - excluded_paths: - - "tests/*" - - "vendor/*" - -checks: - php: true - -coding_style: - php: - spaces: - around_operators: - concatenation: true \ No newline at end of file + - php-scrutinizer-run \ No newline at end of file