php-cs-fixer update.

This commit is contained in:
Greyscale 2024-04-14 15:48:14 +02:00
parent 41bba407a9
commit a3b9a49fec
56 changed files with 355 additions and 318 deletions

View file

@ -41,17 +41,35 @@ return (new PhpCsFixer\Config)
->setRiskyAllowed(true) ->setRiskyAllowed(true)
->setHideProgress(false) ->setHideProgress(false)
->setRules([ ->setRules([
'@PSR2' => true, '@PhpCsFixer' => true,
'strict_param' => true, // '@PhpCsFixer:risky' => true,
'array_syntax' => ['syntax' => 'short'], '@PHP82Migration' => true,
'@PhpCsFixer' => true, '@PHP80Migration:risky' => true,
'@PHP73Migration' => true, '@PSR12' => true,
'no_php4_constructor' => true, '@PSR12:risky' => true,
'no_unused_imports' => true, '@PHPUnit100Migration:risky' => true,
'no_useless_else' => true,
'no_superfluous_phpdoc_tags' => false, 'binary_operator_spaces' => [
'void_return' => true, 'default' => 'align_single_space_minimal',
'yoda_style' => false, 'operators' => [
'=' => 'align_single_space',
'=>' => 'align_single_space',
],
],
'types_spaces' => [
'space' => 'single',
'space_multiple_catch' => 'single',
],
// Annoyance-fixers:
'concat_space' => ['spacing' => 'one'], // This one is a matter of taste.
'no_superfluous_phpdoc_tags' => [
'allow_mixed' => false,
'allow_unused_params' => false,
'remove_inheritdoc' => true,
],
'yoda_style' => false, // Disabled as its annoying. Comes with @PhpCsFixer
'native_function_invocation' => false, // Disabled as adding count($i) -> \count($i) is annoying, but supposedly more performant
]) ])
->setFinder($finder) ->setFinder($finder)
; ;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
function detectAndLoadVendor($path = __DIR__): void function detectAndLoadVendor($path = __DIR__): void
{ {
$path = realpath($path); $path = realpath($path);
@ -11,12 +13,12 @@ function detectAndLoadVendor($path = __DIR__): void
if ($fileInfo->isDir() && 'vendor' == $fileInfo->getFilename()) { if ($fileInfo->isDir() && 'vendor' == $fileInfo->getFilename()) {
define('VENDOR_PATH', $fileInfo->getRealPath()); define('VENDOR_PATH', $fileInfo->getRealPath());
require_once VENDOR_PATH.'/autoload.php'; require_once VENDOR_PATH . '/autoload.php';
return; return;
} }
} }
detectAndLoadVendor($path.'/../'); detectAndLoadVendor($path . '/../');
} }
detectAndLoadVendor(); detectAndLoadVendor();

View file

@ -8,7 +8,6 @@ use Doctrine\Common\Annotations\Annotation\Required;
/** /**
* @Annotation * @Annotation
*
* @Target("METHOD") * @Target("METHOD")
*/ */
class JsonSchema class JsonSchema

View file

@ -8,12 +8,10 @@ use Doctrine\Common\Annotations\Annotation\Required;
/** /**
* @Annotation * @Annotation
*
* @Target("METHOD") * @Target("METHOD")
*/ */
class Route class Route
{ {
/** @var array */
public array $methods = ['GET']; public array $methods = ['GET'];
/** /**
@ -21,12 +19,9 @@ class Route
*/ */
public string $path; public string $path;
/** @var string */
public string $access = \Benzine\Router\Route::ACCESS_PUBLIC; public string $access = \Benzine\Router\Route::ACCESS_PUBLIC;
/** @var int */
public int $weight = 100; public int $weight = 100;
/** @var array */
public array $domains = []; public array $domains = [];
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine; namespace Benzine;
use Benzine\Middleware\JsonResponseExecTimeMiddleware; use Benzine\Middleware\JsonResponseExecTimeMiddleware;
@ -31,7 +33,10 @@ use DebugBar\DebugBar;
use DI\Container; use DI\Container;
use DI\ContainerBuilder; use DI\ContainerBuilder;
use Faker\Factory as FakerFactory; use Faker\Factory as FakerFactory;
use Faker\Generator;
use Faker\Provider; use Faker\Provider;
use Kint\Twig\TwigExtension;
use Middlewares\ContentLength;
use Middlewares\TrailingSlash; use Middlewares\TrailingSlash;
use Monolog\Formatter\LineFormatter; use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler; use Monolog\Handler\StreamHandler;
@ -57,30 +62,26 @@ class App
protected EnvironmentService $environmentService; protected EnvironmentService $environmentService;
protected ConfigurationService $configurationService; protected ConfigurationService $configurationService;
protected \Slim\App $app; protected Slim\App $app;
protected Logger $logger; protected Logger $logger;
protected DebugBar $debugBar; protected DebugBar $debugBar;
protected Router $router; protected Router $router;
protected bool $isSessionsEnabled = true; protected bool $isSessionsEnabled = true;
protected bool $interrogateControllersComplete = false; protected bool $interrogateControllersComplete = false;
protected ?CachePoolChain $cachePoolChain = null; protected ?CachePoolChain $cachePoolChain = null;
private array $viewPaths = []; private array $viewPaths = [];
private string $cachePath = APP_ROOT.'/cache'; private string $cachePath = APP_ROOT . '/cache';
private string $logPath = APP_ROOT.'/logs'; private string $logPath = APP_ROOT . '/logs';
private array $supportedLanguages = ['en_US']; private array $supportedLanguages = ['en_US'];
private bool $debugMode = false; private bool $debugMode = false;
private static bool $isInitialised = false; private static bool $isInitialised = false;
public function __construct() public function __construct()
{ {
if (!ini_get('auto_detect_line_endings')) {
ini_set('auto_detect_line_endings', '1');
}
// Configure Dependency Injector // Configure Dependency Injector
$container = $this->setupContainer(); $container = $this->setupContainer();
$this->logger = $container->get(Logger::class); $this->logger = $container->get(Logger::class);
$this->debugBar = $container->get(DebugBar::class); $this->debugBar = $container->get(DebugBar::class);
AppFactory::setContainer($container); AppFactory::setContainer($container);
@ -91,8 +92,8 @@ class App
} }
// Configure default expected views paths // Configure default expected views paths
$this->viewPaths[] = APP_ROOT.'/views/'; $this->viewPaths[] = APP_ROOT . '/views/';
$this->viewPaths[] = APP_ROOT.'/src/Views/'; $this->viewPaths[] = APP_ROOT . '/src/Views/';
// Configure Slim // Configure Slim
$this->app = AppFactory::create(); $this->app = AppFactory::create();
@ -132,19 +133,11 @@ class App
return $this; return $this;
} }
/**
* @return array
*/
public function getViewPaths(): array public function getViewPaths(): array
{ {
return $this->viewPaths; return $this->viewPaths;
} }
/**
* @param array $viewPaths
*
* @return App
*/
public function setViewPaths(array $viewPaths): App public function setViewPaths(array $viewPaths): App
{ {
$this->viewPaths = $viewPaths; $this->viewPaths = $viewPaths;
@ -152,19 +145,11 @@ class App
return $this; return $this;
} }
/**
* @return string
*/
public function getLogPath(): string public function getLogPath(): string
{ {
return $this->logPath; return $this->logPath;
} }
/**
* @param string $logPath
*
* @return App
*/
public function setLogPath(string $logPath): App public function setLogPath(string $logPath): App
{ {
$this->logPath = $logPath; $this->logPath = $logPath;
@ -182,7 +167,7 @@ class App
public function setupContainer(): Container public function setupContainer(): Container
{ {
$app = $this; $app = $this;
$container = $container =
(new ContainerBuilder()) (new ContainerBuilder())
->useAutowiring(true) ->useAutowiring(true)
@ -207,7 +192,7 @@ class App
} }
$twigCachePath = "{$this->getCachePath()}/twig"; $twigCachePath = "{$this->getCachePath()}/twig";
$twigSettings = []; $twigSettings = [];
if ($environmentService->has('TWIG_CACHE') && 'on' == strtolower($environmentService->get('TWIG_CACHE'))) { if ($environmentService->has('TWIG_CACHE') && 'on' == strtolower($environmentService->get('TWIG_CACHE'))) {
$twigSettings['cache'] = $twigCachePath; $twigSettings['cache'] = $twigCachePath;
@ -215,7 +200,7 @@ class App
if (!(new Filesystem())->exists($twigCachePath)) { if (!(new Filesystem())->exists($twigCachePath)) {
try { try {
(new Filesystem())->mkdir($twigCachePath, 0777); (new Filesystem())->mkdir($twigCachePath, 0o777);
} catch (IOException $IOException) { } catch (IOException $IOException) {
unset($twigSettings['cache']); unset($twigSettings['cache']);
if (!in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) { if (!in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) {
@ -245,7 +230,7 @@ class App
$twig->addExtension(new Twig\Extension\DebugExtension()); $twig->addExtension(new Twig\Extension\DebugExtension());
// Add Twig extension to integrate Kint // Add Twig extension to integrate Kint
$twig->addExtension(new \Kint\Twig\TwigExtension()); $twig->addExtension(new TwigExtension());
// Add Twig extension to check if something is an instance of a known class or entity // Add Twig extension to check if something is an instance of a known class or entity
$twig->addExtension(new Extensions\InstanceOfExtension()); $twig->addExtension(new Extensions\InstanceOfExtension());
@ -267,9 +252,7 @@ class App
}); });
// This is required as some plugins for Slim expect there to be a twig available as "view" // This is required as some plugins for Slim expect there to be a twig available as "view"
$container->set('view', function (Slim\Views\Twig $twig) { $container->set('view', fn (Slim\Views\Twig $twig) => $twig);
return $twig;
});
$container->set(Translation\Translator::class, function (SessionService $sessionService) { $container->set(Translation\Translator::class, function (SessionService $sessionService) {
$selectedLanguage = $sessionService->has('Language') ? $sessionService->get('Language') : 'en_US'; $selectedLanguage = $sessionService->has('Language') ? $sessionService->get('Language') : 'en_US';
@ -286,7 +269,7 @@ class App
$translator->addLoader('yaml', $yamlLoader); $translator->addLoader('yaml', $yamlLoader);
// add some resources to the translator // add some resources to the translator
$translator->addResource('yaml', APP_ROOT."/src/Strings/{$selectedLanguage}.yaml", $selectedLanguage); $translator->addResource('yaml', APP_ROOT . "/src/Strings/{$selectedLanguage}.yaml", $selectedLanguage);
return $translator; return $translator;
}); });
@ -298,7 +281,7 @@ class App
); );
}); });
$container->set(\Faker\Generator::class, function () { $container->set(Generator::class, function () {
$faker = FakerFactory::create(); $faker = FakerFactory::create();
$faker->addProvider(new Provider\Base($faker)); $faker->addProvider(new Provider\Base($faker));
$faker->addProvider(new Provider\DateTime($faker)); $faker->addProvider(new Provider\DateTime($faker));
@ -339,7 +322,7 @@ class App
$container->set('MonologFormatter', function (EnvironmentService $environmentService) { $container->set('MonologFormatter', function (EnvironmentService $environmentService) {
return new LineFormatter( return new LineFormatter(
// the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%" // the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%"
$environmentService->get('MONOLOG_FORMAT', '[%datetime%] %channel%.%level_name%: %message% %context% %extra%')."\n", $environmentService->get('MONOLOG_FORMAT', '[%datetime%] %channel%.%level_name%: %message% %context% %extra%') . "\n",
'Y n j, g:i a' 'Y n j, g:i a'
); );
}); });
@ -361,11 +344,11 @@ class App
))); )));
// Configure a pretty CLI Handler // Configure a pretty CLI Handler
$cliHandler = new StreamHandler('php://stdout', Logger::DEBUG); $cliHandler = new StreamHandler('php://stdout', Logger::DEBUG);
$cliFormatter = new ColoredLineFormatter( $cliFormatter = new ColoredLineFormatter(
new TrafficLight(), new TrafficLight(),
// the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%" // the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%"
$environmentService->get('MONOLOG_FORMAT', '[%datetime%] %level_name%: %message%')."\n", $environmentService->get('MONOLOG_FORMAT', '[%datetime%] %level_name%: %message%') . "\n",
'g:i' 'g:i'
); );
$cliHandler->setFormatter($cliFormatter); $cliHandler->setFormatter($cliFormatter);
@ -392,9 +375,7 @@ class App
); );
}); });
$container->set(TrailingSlash::class, function () { $container->set(TrailingSlash::class, fn () => (new TrailingSlash())->redirect());
return (new TrailingSlash())->redirect();
});
$container->set(DebugBar::class, function (Logger $logger) { $container->set(DebugBar::class, function (Logger $logger) {
return (new DebugBar()) return (new DebugBar())
@ -414,7 +395,7 @@ class App
); );
}); });
$this->environmentService = $container->get(Services\EnvironmentService::class); $this->environmentService = $container->get(EnvironmentService::class);
if ($this->environmentService->has('TIMEZONE')) { if ($this->environmentService->has('TIMEZONE')) {
date_default_timezone_set($this->environmentService->get('TIMEZONE')); date_default_timezone_set($this->environmentService->get('TIMEZONE'));
} elseif ((new Filesystem())->exists('/etc/timezone')) { } elseif ((new Filesystem())->exists('/etc/timezone')) {
@ -434,11 +415,11 @@ class App
// Middlewares // Middlewares
$this->app->addBodyParsingMiddleware(); $this->app->addBodyParsingMiddleware();
// $this->app->add($container->get(\Middlewares\Geolocation::class)); // $this->app->add($container->get(\Middlewares\Geolocation::class));
$this->app->add($container->get(\Middlewares\TrailingSlash::class)); $this->app->add($container->get(TrailingSlash::class));
// $this->app->add($container->get(\Middlewares\Whoops::class)); // $this->app->add($container->get(\Middlewares\Whoops::class));
// $this->app->add($container->get(\Middlewares\Minifier::class)); // $this->app->add($container->get(\Middlewares\Minifier::class));
// $this->app->add($container->get(\Middlewares\GzipEncoder::class)); // $this->app->add($container->get(\Middlewares\GzipEncoder::class));
$this->app->add($container->get(\Middlewares\ContentLength::class)); $this->app->add($container->get(ContentLength::class));
} }
/** /**
@ -453,7 +434,7 @@ class App
$tempApp = new $calledClass(); $tempApp = new $calledClass();
/** @var ConfigurationService $config */ /** @var ConfigurationService $config */
$config = $tempApp->get(ConfigurationService::class); $config = $tempApp->get(ConfigurationService::class);
$configCoreClass = $config->getCore(); $configCoreClass = $config->getCore();
if ($configCoreClass != get_called_class()) { if ($configCoreClass != get_called_class()) {
self::$instance = new $configCoreClass(); self::$instance = new $configCoreClass();
@ -499,7 +480,7 @@ class App
public function runHttp(): void public function runHttp(): void
{ {
$serverRequestCreator = ServerRequestCreatorFactory::create(); $serverRequestCreator = ServerRequestCreatorFactory::create();
$request = $serverRequestCreator->createServerRequestFromGlobals(); $request = $serverRequestCreator->createServerRequestFromGlobals();
$this->loadAllRoutes($request); $this->loadAllRoutes($request);
@ -532,7 +513,7 @@ class App
public function addSupportedLanguage(string $supportedLanguage): self public function addSupportedLanguage(string $supportedLanguage): self
{ {
$this->supportedLanguages[] = $supportedLanguage; $this->supportedLanguages[] = $supportedLanguage;
$this->supportedLanguages = array_unique($this->supportedLanguages); $this->supportedLanguages = array_unique($this->supportedLanguages);
return $this; return $this;
} }
@ -573,7 +554,7 @@ class App
$this->interrogateControllers(); $this->interrogateControllers();
$this->debugBar['time']->stopMeasure('interrogateControllers'); $this->debugBar['time']->stopMeasure('interrogateControllers');
$timeToBootstrapMs = (microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000; $timeToBootstrapMs = (microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000;
$bootstrapTooLongThresholdMs = 300; $bootstrapTooLongThresholdMs = 300;
if ($timeToBootstrapMs >= $bootstrapTooLongThresholdMs && php_sapi_name() != 'cli') { if ($timeToBootstrapMs >= $bootstrapTooLongThresholdMs && php_sapi_name() != 'cli') {
$this->logger->warning(sprintf('Bootstrap complete in %sms which is more than the threshold of %sms', number_format($timeToBootstrapMs, 2), $bootstrapTooLongThresholdMs)); $this->logger->warning(sprintf('Bootstrap complete in %sms which is more than the threshold of %sms', number_format($timeToBootstrapMs, 2), $bootstrapTooLongThresholdMs));
@ -586,7 +567,7 @@ class App
protected function interrogateTranslations(): void protected function interrogateTranslations(): void
{ {
$stringPath = APP_ROOT.'/src/Strings'; $stringPath = APP_ROOT . '/src/Strings';
if (!(new Filesystem())->exists($stringPath)) { if (!(new Filesystem())->exists($stringPath)) {
return; return;
} }
@ -615,7 +596,7 @@ class App
$appClass = new \ReflectionClass(static::class); $appClass = new \ReflectionClass(static::class);
$this->router->loadRoutesFromAnnotations( $this->router->loadRoutesFromAnnotations(
[ [
APP_ROOT.'/src/Controllers', APP_ROOT . '/src/Controllers',
], ],
$appClass->getNamespaceName() $appClass->getNamespaceName()
); );

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Controllers; namespace Benzine\Controllers;
use Benzine\Controllers\Filters\Filter; use Benzine\Controllers\Filters\Filter;
@ -17,8 +19,7 @@ abstract class AbstractController
public function __construct( public function __construct(
protected Logger $logger, protected Logger $logger,
protected CacheProvider $cacheProvider protected CacheProvider $cacheProvider
) { ) {}
}
public function xmlResponse(\SimpleXMLElement $root, Request $request, Response $response): Response public function xmlResponse(\SimpleXMLElement $root, Request $request, Response $response): Response
{ {
@ -69,7 +70,7 @@ abstract class AbstractController
return true; return true;
} }
throw new FilterDecodeException('Could not decode given Filter. Reason: Not JSON. Given: "'.$filterText.'"'); throw new FilterDecodeException('Could not decode given Filter. Reason: Not JSON. Given: "' . $filterText . '"');
} }
} }
@ -103,7 +104,7 @@ abstract class AbstractController
} }
// Generate an etag // Generate an etag
$etag = md5($filesystem->lastModified($filename).$filename); $etag = md5($filesystem->lastModified($filename) . $filename);
$response = $this->cacheProvider->withEtag($response, $etag); $response = $this->cacheProvider->withEtag($response, $etag);
// Detect mimetype for content-type header from file meta // Detect mimetype for content-type header from file meta
@ -113,7 +114,7 @@ abstract class AbstractController
// No dice? Early-load the data and interrogate that for mimetype then I GUESS. // No dice? Early-load the data and interrogate that for mimetype then I GUESS.
if (!$mimetype) { if (!$mimetype) {
$data = $filesystem->read($filename); $data = $filesystem->read($filename);
$mimetype = (new FinfoMimeTypeDetector()) $mimetype = (new FinfoMimeTypeDetector())
->detectMimeTypeFromBuffer($data) ->detectMimeTypeFromBuffer($data)
; ;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Controllers; namespace Benzine\Controllers;
use Benzine\ORM\Interfaces\ModelInterface; use Benzine\ORM\Interfaces\ModelInterface;
@ -15,7 +17,7 @@ abstract class AbstractCrudController extends AbstractController
$service = $this->getService(); $service = $this->getService();
if ($this->requestHasFilters($request, $response)) { if ($this->requestHasFilters($request, $response)) {
$filterBehaviours = $this->parseFilters($request, $response); $filterBehaviours = $this->parseFilters($request, $response);
$foundObjects = $service->getAll( $foundObjects = $service->getAll(
$filterBehaviours->getLimit(), $filterBehaviours->getLimit(),
$filterBehaviours->getOffset(), $filterBehaviours->getOffset(),
$filterBehaviours->getWheres(), $filterBehaviours->getWheres(),
@ -32,8 +34,8 @@ abstract class AbstractCrudController extends AbstractController
return $this->jsonResponse( return $this->jsonResponse(
[ [
'Status' => 'Okay', 'Status' => 'Okay',
'Action' => 'LIST', 'Action' => 'LIST',
$this->service->getTermPlural() => $objects, $this->service->getTermPlural() => $objects,
], ],
$request, $request,
@ -47,8 +49,8 @@ abstract class AbstractCrudController extends AbstractController
if ($object) { if ($object) {
return $this->jsonResponse( return $this->jsonResponse(
[ [
'Status' => 'Okay', 'Status' => 'Okay',
'Action' => 'GET', 'Action' => 'GET',
$this->service->getTermSingular() => $object->__toArray(), $this->service->getTermSingular() => $object->__toArray(),
], ],
$request, $request,
@ -79,8 +81,8 @@ abstract class AbstractCrudController extends AbstractController
return $this->jsonResponse( return $this->jsonResponse(
[ [
'Status' => 'Okay', 'Status' => 'Okay',
'Action' => 'CREATE', 'Action' => 'CREATE',
$this->service->getTermSingular() => $object->__toArray(), $this->service->getTermSingular() => $object->__toArray(),
], ],
$request, $request,
@ -101,8 +103,8 @@ abstract class AbstractCrudController extends AbstractController
return $this->jsonResponse( return $this->jsonResponse(
[ [
'Status' => 'Okay', 'Status' => 'Okay',
'Action' => 'DELETE', 'Action' => 'DELETE',
$this->service->getTermSingular() => $array, $this->service->getTermSingular() => $array,
], ],
$request, $request,

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Controllers; namespace Benzine\Controllers;
use DebugBar\DebugBar; use DebugBar\DebugBar;
@ -48,7 +50,7 @@ abstract class AbstractHTMLController extends AbstractController
)->withHeader('Content-Type', 'text/html'); )->withHeader('Content-Type', 'text/html');
$renderTimeLimitMs = 500; $renderTimeLimitMs = 500;
$renderTimeMs = (microtime(true) - $renderStart) * 1000; $renderTimeMs = (microtime(true) - $renderStart) * 1000;
if ($renderTimeMs >= $renderTimeLimitMs) { if ($renderTimeMs >= $renderTimeLimitMs) {
$this->logger->debug(sprintf( $this->logger->debug(sprintf(

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Controllers\Filters; namespace Benzine\Controllers\Filters;
use Benzine\Exceptions\FilterDecodeException; use Benzine\Exceptions\FilterDecodeException;
@ -20,8 +22,6 @@ class Filter
/** /**
* @throws FilterDecodeException * @throws FilterDecodeException
*
* @return Filter
*/ */
public function setOrderDirection(string $orderDirection): self public function setOrderDirection(string $orderDirection): self
{ {
@ -34,8 +34,6 @@ class Filter
} }
/** /**
* @param $header
*
* @throws FilterDecodeException * @throws FilterDecodeException
*/ */
public function parseFromHeader($header): self public function parseFromHeader($header): self
@ -75,11 +73,6 @@ class Filter
return $this->limit; return $this->limit;
} }
/**
* @param mixed $limit
*
* @return Filter
*/
public function setLimit($limit): self public function setLimit($limit): self
{ {
$this->limit = $limit; $this->limit = $limit;
@ -92,11 +85,6 @@ class Filter
return $this->offset; return $this->offset;
} }
/**
* @param mixed $offset
*
* @return Filter
*/
public function setOffset($offset): self public function setOffset($offset): self
{ {
$this->offset = $offset; $this->offset = $offset;
@ -109,11 +97,6 @@ class Filter
return $this->wheres; return $this->wheres;
} }
/**
* @param mixed $wheres
*
* @return Filter
*/
public function setWheres($wheres): self public function setWheres($wheres): self
{ {
$this->wheres = $wheres; $this->wheres = $wheres;
@ -126,11 +109,6 @@ class Filter
return $this->order; return $this->order;
} }
/**
* @param mixed $order
*
* @return Filter
*/
public function setOrder($order): self public function setOrder($order): self
{ {
$this->order = $order; $this->order = $order;

View file

@ -1,17 +1,19 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Controllers\Filters; namespace Benzine\Controllers\Filters;
class FilterCondition class FilterCondition
{ {
public const CONDITION_EQUAL = '='; public const CONDITION_EQUAL = '=';
public const CONDITION_NOT_EQUAL = '!='; public const CONDITION_NOT_EQUAL = '!=';
public const CONDITION_GREATER_THAN = '>'; public const CONDITION_GREATER_THAN = '>';
public const CONDITION_LESS_THAN = '<'; public const CONDITION_LESS_THAN = '<';
public const CONDITION_GREATER_THAN_OR_EQUAL = '>='; public const CONDITION_GREATER_THAN_OR_EQUAL = '>=';
public const CONDITION_LESS_THAN_OR_EQUAL = '<='; public const CONDITION_LESS_THAN_OR_EQUAL = '<=';
public const CONDITION_LIKE = 'LIKE'; public const CONDITION_LIKE = 'LIKE';
public const CONDITION_NOT_LIKE = 'NOT LIKE'; public const CONDITION_NOT_LIKE = 'NOT LIKE';
public const CONDITION_IN = 'IN'; public const CONDITION_IN = 'IN';
public const CONDITION_NOT_IN = 'NOT IN'; public const CONDITION_NOT_IN = 'NOT IN';
} }

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
class BenzineConfigurationException extends BenzineException class BenzineConfigurationException extends BenzineException {}
{
}

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
class BenzineException extends \Exception class BenzineException extends \Exception {}
{
}

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
class DbConfigException extends BenzineException class DbConfigException extends BenzineException {}
{
}

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
class DbRuntimeException extends BenzineException class DbRuntimeException extends BenzineException {}
{
}

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
class FilterDecodeException extends BenzineException class FilterDecodeException extends BenzineException {}
{
}

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
use Slim\Interfaces\ErrorRendererInterface; use Slim\Interfaces\ErrorRendererInterface;
@ -10,8 +12,8 @@ class JsonErrorHandler implements ErrorRendererInterface
{ {
return json_encode([ return json_encode([
'error' => $exception->getMessage(), 'error' => $exception->getMessage(),
'where' => $exception->getFile().':'.$exception->getLine(), 'where' => $exception->getFile() . ':' . $exception->getLine(),
'code' => $exception->getCode(), 'code' => $exception->getCode(),
], JSON_PRETTY_PRINT); ], JSON_PRETTY_PRINT);
} }
} }

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Exceptions; namespace Benzine\Exceptions;
class WorkerException extends BenzineException class WorkerException extends BenzineException {}
{
}

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Guzzle; namespace Benzine\Guzzle;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
@ -9,8 +11,7 @@ class JsonResponse implements ResponseInterface
{ {
public function __construct( public function __construct(
protected ResponseInterface $response protected ResponseInterface $response
) { ) {}
}
public function json() public function json()
{ {

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Middleware; namespace Benzine\Middleware;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
@ -18,10 +20,10 @@ class JsonResponseExecTimeMiddleware implements MiddlewareInterface
if ($responseJson === null) { if ($responseJson === null) {
return $response; return $response;
} }
$memoryUsageBytes = memory_get_peak_usage(); $memoryUsageBytes = memory_get_peak_usage();
$responseJson['Exec'] = [ $responseJson['Exec'] = [
'TimeSeconds' => (float) number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 5), 'TimeSeconds' => (float) number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 5),
'MemoryBytes' => $memoryUsageBytes, 'MemoryBytes' => $memoryUsageBytes,
'MemoryMegaBytes' => (float) number_format($memoryUsageBytes / 1024 / 1024, 3), 'MemoryMegaBytes' => (float) number_format($memoryUsageBytes / 1024 / 1024, 3),
]; ];

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Middleware; namespace Benzine\Middleware;
use Benzine\Annotations\JsonSchema; use Benzine\Annotations\JsonSchema;
@ -49,15 +51,16 @@ class JsonValidationMiddleware implements MiddlewareInterface
try { try {
// Validate it... // Validate it...
$schema->in(json_decode($request->getBody()->getContents())); $schema->in(json_decode($request->getBody()->getContents()));
// And if we get here, we're golden. // And if we get here, we're golden.
return $handler->handle($request); return $handler->handle($request);
} catch (Exception $exception) { } catch (Exception $exception) {
// Whelp, we've failed validation, build a failure message. // Whelp, we've failed validation, build a failure message.
$response = new Response(); $response = new Response();
$content = json_encode([ $content = json_encode([
'Status' => 'FAIL', 'Status' => 'FAIL',
'Reason' => "Invalid JSON, doesn't match schema!", 'Reason' => "Invalid JSON, doesn't match schema!",
'Error' => $exception->getMessage(), 'Error' => $exception->getMessage(),
], JSON_PRETTY_PRINT); ], JSON_PRETTY_PRINT);
$response->getBody()->write($content); $response->getBody()->write($content);

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Models\Traits; namespace Benzine\Models\Traits;
use Carbon\Carbon; use Carbon\Carbon;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Redis\Lua; namespace Benzine\Redis\Lua;
use Benzine\Redis\Redis; use Benzine\Redis\Redis;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Redis\Lua; namespace Benzine\Redis\Lua;
class SetIfHigher extends AbstractLuaExtension class SetIfHigher extends AbstractLuaExtension
@ -7,16 +9,16 @@ class SetIfHigher extends AbstractLuaExtension
protected function getScript(): string protected function getScript(): string
{ {
return <<<'LUA' return <<<'LUA'
local c = tonumber(redis.call('get', KEYS[1])); local c = tonumber(redis.call('get', KEYS[1]));
if c then if c then
if tonumber(ARGV[1]) > c then if tonumber(ARGV[1]) > c then
redis.call('set', KEYS[1], ARGV[1]) redis.call('set', KEYS[1], ARGV[1])
return tonumber(ARGV[1]) - c return tonumber(ARGV[1]) - c
else else
return 0 return 0
end end
else else
return redis.call('set', KEYS[1], ARGV[1]) return redis.call('set', KEYS[1], ARGV[1])
end end
LUA; LUA;
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Redis\Lua; namespace Benzine\Redis\Lua;
class SetIfLower extends AbstractLuaExtension class SetIfLower extends AbstractLuaExtension
@ -7,16 +9,16 @@ class SetIfLower extends AbstractLuaExtension
protected function getScript(): string protected function getScript(): string
{ {
return <<<'LUA' return <<<'LUA'
local c = tonumber(redis.call('get', KEYS[1])); local c = tonumber(redis.call('get', KEYS[1]));
if c then if c then
if tonumber(ARGV[1]) < c then if tonumber(ARGV[1]) < c then
redis.call('set', KEYS[1], ARGV[1]) redis.call('set', KEYS[1], ARGV[1])
return tonumber(ARGV[1]) - c return tonumber(ARGV[1]) - c
else else
return 0 return 0
end end
else else
return redis.call('set', KEYS[1], ARGV[1]) return redis.call('set', KEYS[1], ARGV[1])
end end
LUA; LUA;
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Redis\Lua; namespace Benzine\Redis\Lua;
class ZAddIfHigher extends AbstractLuaExtension class ZAddIfHigher extends AbstractLuaExtension
@ -7,17 +9,17 @@ class ZAddIfHigher extends AbstractLuaExtension
protected function getScript(): string protected function getScript(): string
{ {
return <<<'LUA' return <<<'LUA'
local c = tonumber(redis.call('zscore', KEYS[1], ARGV[1])); local c = tonumber(redis.call('zscore', KEYS[1], ARGV[1]));
if c then if c then
if tonumber(KEYS[2]) > c then if tonumber(KEYS[2]) > c then
redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) redis.call('zadd', KEYS[1], KEYS[2], ARGV[1])
return tonumber(KEYS[2]) - c return tonumber(KEYS[2]) - c
else else
return 0 return 0
end end
else else
redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) redis.call('zadd', KEYS[1], KEYS[2], ARGV[1])
return 'OK' return 'OK'
end end
LUA; LUA;
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Redis\Lua; namespace Benzine\Redis\Lua;
class ZAddIfLower extends AbstractLuaExtension class ZAddIfLower extends AbstractLuaExtension
@ -7,17 +9,17 @@ class ZAddIfLower extends AbstractLuaExtension
protected function getScript(): string protected function getScript(): string
{ {
return <<<'LUA' return <<<'LUA'
local c = tonumber(redis.call('zscore', KEYS[1], ARGV[1])); local c = tonumber(redis.call('zscore', KEYS[1], ARGV[1]));
if c then if c then
if tonumber(KEYS[2]) < c then if tonumber(KEYS[2]) < c then
redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) redis.call('zadd', KEYS[1], KEYS[2], ARGV[1])
return tonumber(KEYS[2]) - c return tonumber(KEYS[2]) - c
else else
return 0 return 0
end end
else else
redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) redis.call('zadd', KEYS[1], KEYS[2], ARGV[1])
return 'OK' return 'OK'
end end
LUA; LUA;
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Redis; namespace Benzine\Redis;
use Monolog\Logger; use Monolog\Logger;
@ -230,14 +232,14 @@ class Redis
/** @var Lua\AbstractLuaExtension[] */ /** @var Lua\AbstractLuaExtension[] */
private array $scripts; private array $scripts;
public function __construct(Logger $logger, string $host, int $port = 6379, string $password = null, float $timeout = 0.0) public function __construct(Logger $logger, string $host, int $port = 6379, ?string $password = null, float $timeout = 0.0)
{ {
$this->logger = $logger; $this->logger = $logger;
$this->host = $host; $this->host = $host;
$this->port = $port; $this->port = $port;
$this->password = $password; $this->password = $password;
$this->timeout = $timeout; $this->timeout = $timeout;
$this->redis = new \Redis(); $this->redis = new \Redis();
} }

View file

@ -1,12 +1,14 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Router; namespace Benzine\Router;
use Slim\App; use Slim\App;
class Route class Route
{ {
public const ACCESS_PUBLIC = 'public'; public const ACCESS_PUBLIC = 'public';
public const ACCESS_PRIVATE = 'private'; public const ACCESS_PRIVATE = 'private';
public const ARGUMENT_ACCESS = '_access'; public const ARGUMENT_ACCESS = '_access';
@ -19,7 +21,7 @@ class Route
protected $routerPattern; protected $routerPattern;
protected $httpEndpoint; protected $httpEndpoint;
protected $httpMethod = 'GET'; protected $httpMethod = 'GET';
protected $weight = 0; protected $weight = 0;
protected $singular; protected $singular;
protected $plural; protected $plural;
protected $properties; protected $properties;
@ -28,7 +30,7 @@ class Route
protected $exampleEntity; protected $exampleEntity;
protected $exampleEntityFinderFunction; protected $exampleEntityFinderFunction;
protected array $callbackProperties = []; protected array $callbackProperties = [];
protected array $arguments = [ protected array $arguments = [
self::ARGUMENT_ACCESS => self::ACCESS_PUBLIC, self::ARGUMENT_ACCESS => self::ACCESS_PUBLIC,
]; ];
protected array $validDomains = []; protected array $validDomains = [];
@ -49,7 +51,6 @@ class Route
} }
/** /**
* @param $name
* @param null $default * @param null $default
* *
* @return $this * @return $this
@ -58,21 +59,21 @@ class Route
{ {
return $this->populateCallbackProperty($name, [ return $this->populateCallbackProperty($name, [
'isMandatory' => $mandatory, 'isMandatory' => $mandatory,
'default' => $default, 'default' => $default,
]); ]);
} }
public function populateCallbackProperty(string $name, array $property) public function populateCallbackProperty(string $name, array $property)
{ {
$property['name'] = $name; $property['name'] = $name;
$this->callbackProperties[$name] = array_merge( $this->callbackProperties[$name] = array_merge(
[ [
'in' => null, 'in' => null,
'description' => null, 'description' => null,
'isMandatory' => null, 'isMandatory' => null,
'default' => null, 'default' => null,
'type' => null, 'type' => null,
'examples' => [], 'examples' => [],
], ],
$property $property
); );
@ -100,7 +101,7 @@ class Route
if (is_numeric($name)) { if (is_numeric($name)) {
$this->properties[] = $type; $this->properties[] = $type;
} else { } else {
$this->properties[] = $name; $this->properties[] = $name;
$this->propertyData[$name]['type'] = $type; $this->propertyData[$name]['type'] = $type;
} }
} }
@ -109,15 +110,13 @@ class Route
} }
/** /**
* @param mixed $propertyOptions
*
* @return Route * @return Route
*/ */
public function setPropertyOptions($propertyOptions) public function setPropertyOptions($propertyOptions)
{ {
$this->propertyOptions = []; $this->propertyOptions = [];
foreach ($propertyOptions as $name => $options) { foreach ($propertyOptions as $name => $options) {
$this->propertyOptions[$name] = $options; $this->propertyOptions[$name] = $options;
$this->propertyData[$name]['options'] = $options; $this->propertyData[$name]['options'] = $options;
} }
@ -166,7 +165,7 @@ class Route
public function setArgument(string $argument, $value): Route public function setArgument(string $argument, $value): Route
{ {
$argument = $this->prefixArgumentKey($argument); $argument = $this->prefixArgumentKey($argument);
$this->arguments[$argument] = $value; $this->arguments[$argument] = $value;
return $this; return $this;
@ -322,8 +321,6 @@ class Route
} }
/** /**
* @param mixed $exampleEntity
*
* @return Route * @return Route
*/ */
public function setExampleEntity($exampleEntity) public function setExampleEntity($exampleEntity)
@ -339,8 +336,6 @@ class Route
} }
/** /**
* @param mixed $exampleEntityFinderFunction
*
* @return Route * @return Route
*/ */
public function setExampleEntityFinderFunction($exampleEntityFinderFunction) public function setExampleEntityFinderFunction($exampleEntityFinderFunction)
@ -389,7 +384,7 @@ class Route
return count($this->validDomains) > 0; return count($this->validDomains) > 0;
} }
public function isInContainedInValidDomains(string $host = null): bool public function isInContainedInValidDomains(?string $host = null): bool
{ {
if (null === $host) { if (null === $host) {
return false; return false;
@ -413,7 +408,7 @@ class Route
private function prefixArgumentKey(string $key) private function prefixArgumentKey(string $key)
{ {
if (0 !== strpos($key, '_')) { if (!str_starts_with($key, '_')) {
$key = "_{$key}"; $key = "_{$key}";
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Router; namespace Benzine\Router;
use Cache\Adapter\Chain\CachePoolChain; use Cache\Adapter\Chain\CachePoolChain;
@ -22,13 +24,13 @@ class Router
public function __construct(Logger $logger, CachePoolChain $cachePoolChain) public function __construct(Logger $logger, CachePoolChain $cachePoolChain)
{ {
$this->logger = $logger; $this->logger = $logger;
$this->cachePoolChain = $cachePoolChain; $this->cachePoolChain = $cachePoolChain;
} }
public function loadRoutesFromAnnotations( public function loadRoutesFromAnnotations(
array $controllerPaths, array $controllerPaths,
string $baseNamespace = null ?string $baseNamespace = null
): void { ): void {
AnnotationRegistry::registerLoader('class_exists'); AnnotationRegistry::registerLoader('class_exists');
@ -39,15 +41,15 @@ class Router
continue; continue;
} }
$dirIterator = new \RecursiveDirectoryIterator($controllerPath); $dirIterator = new \RecursiveDirectoryIterator($controllerPath);
$iteratorIterator = new \RecursiveIteratorIterator($dirIterator); $iteratorIterator = new \RecursiveIteratorIterator($dirIterator);
$phpFiles = new \RegexIterator($iteratorIterator, '/^.+\.php$/i', \RecursiveRegexIterator::GET_MATCH); $phpFiles = new \RegexIterator($iteratorIterator, '/^.+\.php$/i', \RecursiveRegexIterator::GET_MATCH);
foreach ($phpFiles as $controllerFile) { foreach ($phpFiles as $controllerFile) {
$fileClassName = ltrim(str_replace([$controllerPath, '/', '.php'], ['', '\\', ''], $controllerFile[0]), '\\'); $fileClassName = ltrim(str_replace([$controllerPath, '/', '.php'], ['', '\\', ''], $controllerFile[0]), '\\');
$expectedClasses = [ $expectedClasses = [
$baseNamespace.'\\Controllers\\'.$fileClassName, $baseNamespace . '\\Controllers\\' . $fileClassName,
'Benzine\\Controllers\\'.$fileClassName, 'Benzine\\Controllers\\' . $fileClassName,
]; ];
foreach ($expectedClasses as $expectedClass) { foreach ($expectedClasses as $expectedClass) {
@ -82,8 +84,8 @@ class Router
$newRoute $newRoute
->setHttpMethod($httpMethod) ->setHttpMethod($httpMethod)
->setRouterPattern('/'.ltrim($routeAnnotation->path, '/')) ->setRouterPattern('/' . ltrim($routeAnnotation->path, '/'))
->setCallback($expectedClass.':'.$method->name) ->setCallback($expectedClass . ':' . $method->name)
->setWeight($routeAnnotation->weight) ->setWeight($routeAnnotation->weight)
; ;
@ -101,7 +103,7 @@ class Router
} }
} }
public function populateRoutes(App $app, ServerRequestInterface $request = null): App public function populateRoutes(App $app, ?ServerRequestInterface $request = null): App
{ {
if ($this->routesArePopulated) { if ($this->routesArePopulated) {
return $app; return $app;
@ -141,13 +143,13 @@ class Router
public function loadCache(): bool public function loadCache(): bool
{ {
$time = microtime(true); $time = microtime(true);
$cacheItem = $this->cachePoolChain->getItem('routes'); $cacheItem = $this->cachePoolChain->getItem('routes');
if (!$cacheItem || null === $cacheItem->get()) { if (!$cacheItem || null === $cacheItem->get()) {
return false; return false;
} }
$this->routes = $cacheItem->get(); $this->routes = $cacheItem->get();
$timeToLoadFromCacheMs = (microtime(true) - $time) * 1000; $timeToLoadFromCacheMs = (microtime(true) - $time) * 1000;
if ($timeToLoadFromCacheMs >= 500) { if ($timeToLoadFromCacheMs >= 500) {
$this->logger->warning(sprintf('Loaded routes from Cache in %sms, which is slower than 500ms', number_format($timeToLoadFromCacheMs, 2))); $this->logger->warning(sprintf('Loaded routes from Cache in %sms, which is slower than 500ms', number_format($timeToLoadFromCacheMs, 2)));
@ -168,13 +170,13 @@ class Router
$this->cachePoolChain->save($routeItem); $this->cachePoolChain->save($routeItem);
// $this->logger->info('Cached router to cache pool'); // $this->logger->info('Cached router to cache pool');
} catch (CachePoolException $cachePoolException) { } catch (CachePoolException $cachePoolException) {
$this->logger->critical('Cache Pool Exception: '.$cachePoolException->getMessage()); $this->logger->critical('Cache Pool Exception: ' . $cachePoolException->getMessage());
} }
return $this; return $this;
} }
protected function weighRoutes(string $host = null): self protected function weighRoutes(?string $host = null): self
{ {
$allocatedRoutes = []; $allocatedRoutes = [];
if (is_array($this->routes) && count($this->routes) > 0) { if (is_array($this->routes) && count($this->routes) > 0) {
@ -189,7 +191,7 @@ class Router
}); });
foreach ($this->routes as $index => $route) { foreach ($this->routes as $index => $route) {
$routeKey = $route->getHttpMethod().$route->getRouterPattern(); $routeKey = $route->getHttpMethod() . $route->getRouterPattern();
if (!isset($allocatedRoutes[$routeKey]) && ($route->isInContainedInValidDomains($host) || !$route->hasValidDomains())) { if (!isset($allocatedRoutes[$routeKey]) && ($route->isInContainedInValidDomains($host) || !$route->hasValidDomains())) {
$allocatedRoutes[$routeKey] = true; $allocatedRoutes[$routeKey] = true;
} else { } else {

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Services; namespace Benzine\Services;
use Benzine\App; use Benzine\App;
@ -9,14 +11,14 @@ use Symfony\Component\Yaml\Yaml;
class ConfigurationService class ConfigurationService
{ {
public const KEY_APP_NAME = 'application/name'; public const KEY_APP_NAME = 'application/name';
public const KEY_APP_ROOT = 'application/root'; public const KEY_APP_ROOT = 'application/root';
public const KEY_DEBUG_ENABLE = 'application/debug'; public const KEY_DEBUG_ENABLE = 'application/debug';
public const KEY_DEFAULT_ACCESS = 'application/default_access'; public const KEY_DEFAULT_ACCESS = 'application/default_access';
public const KEY_TIMEZONE = 'application/timezone'; public const KEY_TIMEZONE = 'application/timezone';
public const KEY_LOCALE = 'application/locale'; public const KEY_LOCALE = 'application/locale';
public const KEY_SESSION_ENABLED = 'application/session_enabled'; public const KEY_SESSION_ENABLED = 'application/session_enabled';
public const KEY_LOG_FORMAT_DATE = 'logging/format_date'; public const KEY_LOG_FORMAT_DATE = 'logging/format_date';
public const KEY_LOG_FORMAT_MESSAGE = 'logging/format_message'; public const KEY_LOG_FORMAT_MESSAGE = 'logging/format_message';
protected App $app; protected App $app;
@ -28,9 +30,9 @@ class ConfigurationService
public function __construct(App $app, EnvironmentService $environmentService) public function __construct(App $app, EnvironmentService $environmentService)
{ {
$this->app = $app; $this->app = $app;
$this->environmentService = $environmentService; $this->environmentService = $environmentService;
$this->findConfig(); $this->findConfig($this->environmentService->get('BENZINE_CONFIG_PATH', null));
$this->setupDefines(); $this->setupDefines();
} }
@ -42,7 +44,7 @@ class ConfigurationService
/** /**
* @return null|array|string * @return null|array|string
*/ */
public function get(string $key, string $defaultValue = null) public function get(string $key, ?string $defaultValue = null)
{ {
$scope = $this->config; $scope = $this->config;
foreach (explode('/', strtolower($key)) as $keyBit) { foreach (explode('/', strtolower($key)) as $keyBit) {
@ -101,16 +103,16 @@ class ConfigurationService
/** /**
* Locate .benzine.yml. * Locate .benzine.yml.
*/ */
protected function findConfig(string $path = null): bool protected function findConfig(?string $path = null): bool
{ {
if (!$path) { if (!$path) {
$path = getcwd(); $path = getcwd();
// $path = dirname($this->environmentService->get('SCRIPT_FILENAME')); // $path = dirname($this->environmentService->get('SCRIPT_FILENAME'));
} }
if (!(new Filesystem())->exists($path.'/.benzine.yml')) { if (!(new Filesystem())->exists($path . '/.benzine.yml')) {
$this->configNotFoundInPaths[] = $path; $this->configNotFoundInPaths[] = $path;
$currentDirElem = explode(DIRECTORY_SEPARATOR, $path); $currentDirElem = explode(DIRECTORY_SEPARATOR, $path);
array_pop($currentDirElem); array_pop($currentDirElem);
$parentPath = implode(DIRECTORY_SEPARATOR, $currentDirElem); $parentPath = implode(DIRECTORY_SEPARATOR, $currentDirElem);
@ -125,7 +127,7 @@ class ConfigurationService
)); ));
} }
$this->parseFile($path.'/.benzine.yml'); $this->parseFile($path . '/.benzine.yml');
$this->appRoot = $path; $this->appRoot = $path;
return true; return true;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Services; namespace Benzine\Services;
class EnvironmentService class EnvironmentService
@ -24,7 +26,7 @@ class EnvironmentService
return $this->environmentVariables; return $this->environmentVariables;
} }
public function get(string $key, string $default = null) public function get(string $key, ?string $default = null)
{ {
if (isset($this->environmentVariables[$key])) { if (isset($this->environmentVariables[$key])) {
return $this->environmentVariables[$key]; return $this->environmentVariables[$key];

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Services; namespace Benzine\Services;
use Benzine\Redis\Redis; use Benzine\Redis\Redis;
@ -17,7 +19,7 @@ class QueueService
Redis $redis, Redis $redis,
Logger $logger Logger $logger
) { ) {
$this->redis = $redis; $this->redis = $redis;
$this->logger = $logger; $this->logger = $logger;
} }
@ -30,7 +32,7 @@ class QueueService
{ {
$this->redis->multi(); $this->redis->multi();
foreach ($queueItems as $item) { foreach ($queueItems as $item) {
$itemId = UUID::v4(); $itemId = UUID::v4();
$serialised = serialize($item); $serialised = serialize($item);
// Set the data element itself // Set the data element itself
$this->redis->set("queue:data:{$queueName}:{$itemId}", $serialised); $this->redis->set("queue:data:{$queueName}:{$itemId}", $serialised);
@ -110,7 +112,7 @@ class QueueService
$this->redis->get("queue:data:{$queueName}:{$itemId}"); $this->redis->get("queue:data:{$queueName}:{$itemId}");
$this->redis->del(["queue:data:{$queueName}:{$itemId}"]); $this->redis->del(["queue:data:{$queueName}:{$itemId}"]);
$this->redis->decr("queue:length:{$queueName}"); $this->redis->decr("queue:length:{$queueName}");
$response = $this->redis->exec(); $response = $this->redis->exec();
$workerWorkItems[] = unserialize($response[0]); $workerWorkItems[] = unserialize($response[0]);
} }
if ($this->redis->get("queue:length:{$queueName}") <= 0) { if ($this->redis->get("queue:length:{$queueName}") <= 0) {

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Services; namespace Benzine\Services;
use Benzine\Redis\Redis; use Benzine\Redis\Redis;
@ -10,7 +12,7 @@ class SessionService implements \SessionHandlerInterface
protected $oldID; protected $oldID;
private ?bool $redisIsAvailable = null; private ?bool $redisIsAvailable = null;
private int $lifetime = 43200; private int $lifetime = 43200;
private array $dirtyCheck = []; private array $dirtyCheck = [];
public function __construct(Redis $redis) public function __construct(Redis $redis)
@ -87,8 +89,8 @@ class SessionService implements \SessionHandlerInterface
public function read($session_id) public function read($session_id)
{ {
if ($this->useAPCU()) { if ($this->useAPCU()) {
if (apcu_exists('read-'.$session_id)) { if (apcu_exists('read-' . $session_id)) {
return apcu_fetch('read-'.$session_id); return apcu_fetch('read-' . $session_id);
} }
} }
@ -110,9 +112,9 @@ class SessionService implements \SessionHandlerInterface
} }
if ($this->useAPCU()) { if ($this->useAPCU()) {
apcu_store('read-'.$session_id, $result, 30); apcu_store('read-' . $session_id, $result, 30);
} else { } else {
$this->dirtyCheck['read-'.$session_id] = crc32($result); $this->dirtyCheck['read-' . $session_id] = crc32($result);
} }
return $result; return $result;
@ -127,9 +129,9 @@ class SessionService implements \SessionHandlerInterface
public function write($session_id, $session_data): bool public function write($session_id, $session_data): bool
{ {
if ($this->useAPCU()) { if ($this->useAPCU()) {
$dirty = crc32(apcu_fetch('read-'.$session_id)) != crc32($session_data); $dirty = crc32(apcu_fetch('read-' . $session_id)) != crc32($session_data);
} else { } else {
$dirty = $this->dirtyCheck['read-'.$session_id] != crc32($session_data); $dirty = $this->dirtyCheck['read-' . $session_id] != crc32($session_data);
} }
if ($this->useRedis() && $dirty) { if ($this->useRedis() && $dirty) {
@ -138,7 +140,7 @@ class SessionService implements \SessionHandlerInterface
} }
if ($this->useAPCU()) { if ($this->useAPCU()) {
apcu_store('read-'.$session_id, $session_data); apcu_store('read-' . $session_id, $session_data);
} }
return true; return true;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
use MatthewBaggett\Inflection\Inflect; use MatthewBaggett\Inflection\Inflect;
@ -10,13 +12,9 @@ class InflectionExtension extends AbstractExtension
{ {
public function getFilters() public function getFilters()
{ {
$filters = []; $filters = [];
$filters['pluralize'] = new TwigFilter('pluralize', function (string $word = null): string { $filters['pluralize'] = new TwigFilter('pluralize', fn (?string $word = null): string => !empty($word) ? Inflect::pluralize($word) : '');
return !empty($word) ? Inflect::pluralize($word) : ''; $filters['singularize'] = new TwigFilter('singularize', fn (?string $word = null): string => !empty($word) ? Inflect::singularize($word) : '');
});
$filters['singularize'] = new TwigFilter('singularize', function (string $word = null): string {
return !empty($word) ? Inflect::singularize($word) : '';
});
return $filters; return $filters;
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
use Camel\CaseTransformer; use Camel\CaseTransformer;
@ -22,12 +24,10 @@ class TransformExtension extends AbstractExtension
$filters = []; $filters = [];
foreach ($this->transformers as $fromTransformer) { foreach ($this->transformers as $fromTransformer) {
foreach ($this->transformers as $toTransformer) { foreach ($this->transformers as $toTransformer) {
$name = 'transform_'.strtolower($fromTransformer).'_to_'.strtolower($toTransformer); $name = 'transform_' . strtolower($fromTransformer) . '_to_' . strtolower($toTransformer);
$context = $this; $context = $this;
$filters[$name] = $filters[$name] =
new TwigFilter($name, function (string $word) use ($context, $fromTransformer, $toTransformer): string { new TwigFilter($name, fn (string $word): string => $context->transform($word, $fromTransformer, $toTransformer));
return $context->transform($word, $fromTransformer, $toTransformer);
});
} }
} }
@ -37,7 +37,7 @@ class TransformExtension extends AbstractExtension
public function transform($string, $from, $to) public function transform($string, $from, $to)
{ {
$fromTransformer = $this->getTransformer($from); $fromTransformer = $this->getTransformer($from);
$toTransformer = $this->getTransformer($to); $toTransformer = $this->getTransformer($to);
$transformer = new CaseTransformer($fromTransformer, $toTransformer); $transformer = new CaseTransformer($fromTransformer, $toTransformer);

View file

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Twig\Extensions; namespace Benzine\Twig\Extensions;
final class TransformExtensionException extends \Exception final class TransformExtensionException extends \Exception {}
{
}

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
abstract class AbstractForeverLoopWorker extends AbstractWorker implements WorkerInterface abstract class AbstractForeverLoopWorker extends AbstractWorker implements WorkerInterface

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
use Benzine\Services\EnvironmentService; use Benzine\Services\EnvironmentService;
@ -117,7 +119,7 @@ abstract class AbstractQueueWorker extends AbstractWorker
return false; return false;
} }
$items = $this->queueService->pop($this->inputQueue); $items = $this->queueService->pop($this->inputQueue);
$this->resultItems = []; $this->resultItems = [];
// If there are no items popped, return fast. // If there are no items popped, return fast.
@ -144,9 +146,9 @@ abstract class AbstractQueueWorker extends AbstractWorker
$e->getMessage() $e->getMessage()
), ),
[ [
'file' => $e->getFile(), 'file' => $e->getFile(),
'line' => $e->getLine(), 'line' => $e->getLine(),
'code' => $e->getCode(), 'code' => $e->getCode(),
'trace' => array_slice($e->getTrace(), 0, 5), 'trace' => array_slice($e->getTrace(), 0, 5),
] ]
); );

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
use Benzine\Services\EnvironmentService; use Benzine\Services\EnvironmentService;
@ -10,13 +12,13 @@ abstract class AbstractWorker implements WorkerInterface
protected Logger $logger; protected Logger $logger;
protected EnvironmentService $environmentService; protected EnvironmentService $environmentService;
protected int $timeBetweenRuns = 5; protected int $timeBetweenRuns = 5;
protected bool $stopOnZero = false; protected bool $stopOnZero = false;
public function __construct( public function __construct(
Logger $logger, Logger $logger,
EnvironmentService $environmentService EnvironmentService $environmentService
) { ) {
$this->logger = $logger; $this->logger = $logger;
$this->environmentService = $environmentService; $this->environmentService = $environmentService;
$this->setUp(); $this->setUp();
$this->logger->info( $this->logger->info(
@ -27,13 +29,8 @@ abstract class AbstractWorker implements WorkerInterface
); );
} }
protected function setUp(): void protected function setUp(): void {}
{
}
/**
* @param bool $stopOnZero
*/
public function setStopOnZero(bool $stopOnZero): self public function setStopOnZero(bool $stopOnZero): self
{ {
$this->stopOnZero = $stopOnZero; $this->stopOnZero = $stopOnZero;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
class ExampleQueueWorker extends AbstractQueueWorker class ExampleQueueWorker extends AbstractQueueWorker

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
use Benzine\Redis\Redis; use Benzine\Redis\Redis;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
interface WorkerInterface interface WorkerInterface

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Workers; namespace Benzine\Workers;
use Benzine\Exceptions\WorkerException; use Benzine\Exceptions\WorkerException;
@ -12,7 +14,7 @@ class WorkerWorkItem implements \Serializable
public function __call($name, $arguments) public function __call($name, $arguments)
{ {
$method = substr(strtolower($name), 0, 3); $method = substr(strtolower($name), 0, 3);
$field = substr(strtolower($name), 3); $field = substr(strtolower($name), 3);
switch ($method) { switch ($method) {
case 'set': case 'set':
@ -40,7 +42,7 @@ class WorkerWorkItem implements \Serializable
public static function Factory(object $object) public static function Factory(object $object)
{ {
$class = get_class($object); $class = $object::class;
return (new WorkerWorkItem()) return (new WorkerWorkItem())
->setKey($class, $object) ->setKey($class, $object)
@ -52,9 +54,6 @@ class WorkerWorkItem implements \Serializable
return $this->data; return $this->data;
} }
/**
* @return WorkerWorkItem
*/
public function setData(array $data): self public function setData(array $data): self
{ {
$this->data = $data; $this->data = $data;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests; namespace Benzine\Tests;
use Faker\Factory as FakerFactory; use Faker\Factory as FakerFactory;
@ -55,8 +57,8 @@ abstract class AbstractBaseTestCase extends AbstractTestCase
*/ */
public function invokeMethod(&$object, $methodName, array $parameters = []) public function invokeMethod(&$object, $methodName, array $parameters = [])
{ {
$reflection = new \ReflectionClass(get_class($object)); $reflection = new \ReflectionClass($object::class);
$method = $reflection->getMethod($methodName); $method = $reflection->getMethod($methodName);
$method->setAccessible(true); $method->setAccessible(true);
return $method->invokeArgs($object, $parameters); return $method->invokeArgs($object, $parameters);
@ -64,8 +66,8 @@ abstract class AbstractBaseTestCase extends AbstractTestCase
public function setProtectedProperty(&$object, $property, $value) public function setProtectedProperty(&$object, $property, $value)
{ {
$reflection = new \ReflectionClass(get_class($object)); $reflection = new \ReflectionClass($object::class);
$prop = $reflection->getProperty($property); $prop = $reflection->getProperty($property);
$prop->setAccessible(true); $prop->setAccessible(true);
return $prop->setValue($object, $value); return $prop->setValue($object, $value);
@ -73,8 +75,8 @@ abstract class AbstractBaseTestCase extends AbstractTestCase
public function getProtectedProperty(&$object, $property) public function getProtectedProperty(&$object, $property)
{ {
$reflection = new \ReflectionClass(get_class($object)); $reflection = new \ReflectionClass($object::class);
$prop = $reflection->getProperty($property); $prop = $reflection->getProperty($property);
$prop->setAccessible(true); $prop->setAccessible(true);
return $prop->getValue($object); return $prop->getValue($object);

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests; namespace Benzine\Tests;
use Benzine\Tests\Traits\AppTestTrait; use Benzine\Tests\Traits\AppTestTrait;
@ -38,7 +40,7 @@ abstract class AbstractRoutesTestCase extends AbstractBaseTestCase
if ($isJsonRequest) { if ($isJsonRequest) {
if ($dataOrPost !== null) { if ($dataOrPost !== null) {
$dataOrPost = json_decode(json_encode($dataOrPost), true); $dataOrPost = json_decode(json_encode($dataOrPost), true);
$request = $request->withParsedBody($dataOrPost); $request = $request->withParsedBody($dataOrPost);
} }
$request = $request->withHeader('Content-Type', 'application/json'); $request = $request->withHeader('Content-Type', 'application/json');
} else { } else {

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests; namespace Benzine\Tests;
use Benzine\App; use Benzine\App;
@ -23,10 +25,10 @@ abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
{ {
parent::setUpBeforeClass(); parent::setUpBeforeClass();
self::$logger = App::DI(Logger::class); self::$logger = App::DI(Logger::class);
self::$environmentService = App::DI(EnvironmentService::class); self::$environmentService = App::DI(EnvironmentService::class);
$capabilities = [WebDriverCapabilityType::BROWSER_NAME => 'chrome']; $capabilities = [WebDriverCapabilityType::BROWSER_NAME => 'chrome'];
self::$webDriver = RemoteWebDriver::create( self::$webDriver = RemoteWebDriver::create(
sprintf( sprintf(
'http://%s:%d/wd/hub', 'http://%s:%d/wd/hub',
@ -40,7 +42,7 @@ abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
self::$webDriver->manage()->timeouts()->implicitlyWait(3); self::$webDriver->manage()->timeouts()->implicitlyWait(3);
self::$screenshotsDir = APP_ROOT.'/build/Screenshots/'.date('Y-m-d H-i-s').'/'; self::$screenshotsDir = APP_ROOT . '/build/Screenshots/' . date('Y-m-d H-i-s') . '/';
} }
public static function tearDownAfterClass(): void public static function tearDownAfterClass(): void
@ -68,9 +70,9 @@ abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
protected function takeScreenshot($name): void protected function takeScreenshot($name): void
{ {
if (!(new Filesystem())->exists(self::$screenshotsDir)) { if (!(new Filesystem())->exists(self::$screenshotsDir)) {
(new Filesystem())->mkdir(self::$screenshotsDir, 0777); (new Filesystem())->mkdir(self::$screenshotsDir, 0o777);
} }
self::$webDriver->takeScreenshot(self::$screenshotsDir.self::$screenshotIndex."_{$name}.jpg"); self::$webDriver->takeScreenshot(self::$screenshotsDir . self::$screenshotIndex . "_{$name}.jpg");
++self::$screenshotIndex; ++self::$screenshotIndex;
} }
} }

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests; namespace Benzine\Tests;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
@ -17,8 +19,8 @@ abstract class AbstractTestCase extends TestCase
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->singleTestTime = microtime(true); $this->singleTestTime = microtime(true);
$this->waypoint_count = 0; $this->waypoint_count = 0;
$this->waypoint_last_time = $this->singleTestTime; $this->waypoint_last_time = $this->singleTestTime;
} }
@ -27,7 +29,7 @@ abstract class AbstractTestCase extends TestCase
parent::tearDown(); parent::tearDown();
if (defined('DEBUG') && DEBUG) { if (defined('DEBUG') && DEBUG) {
$time = microtime(true) - $this->singleTestTime; $time = microtime(true) - $this->singleTestTime;
echo ''.get_called_class().':'.$this->getName().': Took '.number_format($time, 3)." seconds\n\n"; echo '' . get_called_class() . ':' . $this->getName() . ': Took ' . number_format($time, 3) . " seconds\n\n";
} }
} }
@ -35,7 +37,7 @@ abstract class AbstractTestCase extends TestCase
{ {
if (defined('DEBUG') && DEBUG) { if (defined('DEBUG') && DEBUG) {
$time_since_last_waypoint = number_format((microtime(true) - $this->waypoint_last_time) * 1000, 2, '.', ''); $time_since_last_waypoint = number_format((microtime(true) - $this->waypoint_last_time) * 1000, 2, '.', '');
$time_since_begin = number_format((microtime(true) - $this->singleTestTime) * 1000, 2, '.', ''); $time_since_begin = number_format((microtime(true) - $this->singleTestTime) * 1000, 2, '.', '');
++$this->waypoint_count; ++$this->waypoint_count;
if (1 == $this->waypoint_count) { if (1 == $this->waypoint_count) {
echo "\n"; echo "\n";

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests\Traits; namespace Benzine\Tests\Traits;
use Benzine\App as BenzineApp; use Benzine\App as BenzineApp;
@ -30,9 +32,9 @@ trait AppTestTrait
*/ */
protected function setupContainer(): void protected function setupContainer(): void
{ {
$this->benzineApp = require __DIR__.'/../../../../../bootstrap.php'; $this->benzineApp = require __DIR__ . '/../../../../../bootstrap.php';
$this->slimApp = $this->benzineApp->getApp(); $this->slimApp = $this->benzineApp->getApp();
$container = $this->slimApp->getContainer(); $container = $this->slimApp->getContainer();
if ($container === null) { if ($container === null) {
throw new \UnexpectedValueException('Container must be initialized'); throw new \UnexpectedValueException('Container must be initialized');
@ -41,7 +43,7 @@ trait AppTestTrait
$this->container = $container; $this->container = $container;
$serverRequestCreator = ServerRequestCreatorFactory::create(); $serverRequestCreator = ServerRequestCreatorFactory::create();
$request = $serverRequestCreator->createServerRequestFromGlobals(); $request = $serverRequestCreator->createServerRequestFromGlobals();
$this->benzineApp->loadAllRoutes($request); $this->benzineApp->loadAllRoutes($request);
} }
@ -98,7 +100,7 @@ trait AppTestTrait
* @param string|UriInterface $uri The URI * @param string|UriInterface $uri The URI
* @param null|array $data The json data * @param null|array $data The json data
*/ */
protected function createJsonRequest(string $method, $uri, array $data = null): ServerRequestInterface protected function createJsonRequest(string $method, $uri, ?array $data = null): ServerRequestInterface
{ {
$request = $this->createRequest($method, $uri); $request = $this->createRequest($method, $uri);
@ -116,7 +118,7 @@ trait AppTestTrait
* @param string|UriInterface $uri The URI * @param string|UriInterface $uri The URI
* @param null|array $data The form data * @param null|array $data The form data
*/ */
protected function createFormRequest(string $method, $uri, array $data = null): ServerRequestInterface protected function createFormRequest(string $method, $uri, ?array $data = null): ServerRequestInterface
{ {
$request = $this->createRequest($method, $uri); $request = $this->createRequest($method, $uri);

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests\Traits; namespace Benzine\Tests\Traits;
trait ArrayEquitabilityTrait trait ArrayEquitabilityTrait

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests\Traits; namespace Benzine\Tests\Traits;
use Slim\Container; use Slim\Container;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests\Traits; namespace Benzine\Tests\Traits;
use Faker\Factory as FakerFactory; use Faker\Factory as FakerFactory;

View file

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Benzine\Tests\Traits; namespace Benzine\Tests\Traits;
trait OverrideProtectionTrait trait OverrideProtectionTrait
@ -15,8 +17,8 @@ trait OverrideProtectionTrait
*/ */
public function invokeMethod(&$object, $methodName, array $parameters = []) public function invokeMethod(&$object, $methodName, array $parameters = [])
{ {
$reflection = new \ReflectionClass(get_class($object)); $reflection = new \ReflectionClass($object::class);
$method = $reflection->getMethod($methodName); $method = $reflection->getMethod($methodName);
$method->setAccessible(true); $method->setAccessible(true);
return $method->invokeArgs($object, $parameters); return $method->invokeArgs($object, $parameters);
@ -24,8 +26,8 @@ trait OverrideProtectionTrait
public function setProtectedProperty(&$object, $property, $value) public function setProtectedProperty(&$object, $property, $value)
{ {
$reflection = new \ReflectionClass(get_class($object)); $reflection = new \ReflectionClass($object::class);
$prop = $reflection->getProperty($property); $prop = $reflection->getProperty($property);
$prop->setAccessible(true); $prop->setAccessible(true);
return $prop->setValue($object, $value); return $prop->setValue($object, $value);
@ -33,8 +35,8 @@ trait OverrideProtectionTrait
public function getProtectedProperty(&$object, $property) public function getProtectedProperty(&$object, $property)
{ {
$reflection = new \ReflectionClass(get_class($object)); $reflection = new \ReflectionClass($object::class);
$prop = $reflection->getProperty($property); $prop = $reflection->getProperty($property);
$prop->setAccessible(true); $prop->setAccessible(true);
return $prop->getValue($object); return $prop->getValue($object);