Skip to content

Commit

Permalink
added autowired services into compiled DI container
Browse files Browse the repository at this point in the history
  • Loading branch information
Lung committed Dec 16, 2023
1 parent fe6f4d5 commit e03158d
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 20 deletions.
13 changes: 8 additions & 5 deletions src/Application/ApplicationGetter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,29 @@

namespace kissj\Application;

use DI\Bridge\Slim\Bridge;
use kissj\Settings\Settings;
use Slim\App;

class ApplicationGetter
{
public function getApp(
string $envPath = __DIR__.'/../../',
string $envFilename = '.env',
string $tempPath = __DIR__.'/../../temp'
): \Slim\App {
): App {
$containerBuilder = new \DI\ContainerBuilder();
$containerBuilder->addDefinitions((new \kissj\Settings\Settings())->getContainerDefinition(
$containerBuilder->addDefinitions((new Settings())->getContainerDefinition(
$envPath,
$envFilename,
));
$containerBuilder->useAttributes(true); // used in AbstractController
if ($_ENV['DEBUG'] === 'false') {
// TODO add autowired definitions into container to get more performace
// https://php-di.org/doc/performances.html#optimizing-for-compilation
$containerBuilder->enableCompilation($tempPath);
}

$container = $containerBuilder->build();
$app = \DI\Bridge\Slim\Bridge::create($container);
$app = Bridge::create($container);
$app->setBasePath($_ENV['BASEPATH']);

$app = (new Middleware())->addMiddlewaresInto($app);
Expand Down
5 changes: 3 additions & 2 deletions src/Middleware/UserAuthenticationMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@

class UserAuthenticationMiddleware extends BaseMiddleware
{
public function __construct(private readonly UserRegeneration $userRegeneration)
{
public function __construct(
private readonly UserRegeneration $userRegeneration,
) {
}

public function process(Request $request, ResponseHandler $handler): Response
Expand Down
128 changes: 115 additions & 13 deletions src/Settings/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,74 @@

use Aws\S3\S3Client;
use Dotenv\Dotenv;
use kissj\BankPayment\BankPaymentRepository;
use kissj\BankPayment\FioBankPaymentService;
use kissj\BankPayment\FioBankReaderFactory;
use kissj\Entry\EntryController;
use kissj\Event\ContentArbiterGuest;
use kissj\Event\ContentArbiterIst;
use kissj\Event\ContentArbiterPatrolLeader;
use kissj\Event\ContentArbiterPatrolParticipant;
use kissj\Event\ContentArbiterTroopLeader;
use kissj\Event\ContentArbiterTroopParticipant;
use kissj\Event\EventController;
use kissj\Event\EventRepository;
use kissj\Event\EventService;
use kissj\Export\ExportController;
use kissj\Export\ExportService;
use kissj\FileHandler\FileHandler;
use kissj\FileHandler\LocalFileHandler;
use kissj\FileHandler\S3bucketFileHandler;
use kissj\FlashMessages\FlashMessagesBySession;
use kissj\FlashMessages\FlashMessagesInterface;
use kissj\Logging\Sentry\SentryCollector;
use kissj\Mailer\MailerSettings;
use kissj\Mailer\PhpMailerWrapper;
use kissj\Middleware\AdminsOnlyMiddleware;
use kissj\Middleware\CheckLeaderParticipants;
use kissj\Middleware\ChoosedRoleOnlyMiddleware;
use kissj\Middleware\EventInfoMiddleware;
use kissj\Middleware\LocalizationResolverMiddleware;
use kissj\Middleware\LoggedOnlyMiddleware;
use kissj\Middleware\MonologAdditionalContextMiddleware;
use kissj\Middleware\MonologContextMiddleware;
use kissj\Middleware\NonChoosedRoleOnlyMiddleware;
use kissj\Middleware\NonLoggedOnlyMiddleware;
use kissj\Middleware\OpenStatusOnlyMiddleware;
use kissj\Middleware\PaidStatusOnlyMiddleware;
use kissj\Middleware\PatrolLeadersOnlyMiddleware;
use kissj\Middleware\SentryContextMiddleware;
use kissj\Middleware\SentryHttpContextMiddleware;
use kissj\Middleware\TroopLeadersOnlyMiddleware;
use kissj\Middleware\TroopParticipantsOnlyMiddleware;
use kissj\Middleware\UserAuthenticationMiddleware;
use kissj\Orm\Mapper;
use kissj\Participant\Admin\AdminController;
use kissj\Participant\Admin\AdminRepository;
use kissj\Participant\Admin\AdminService;
use kissj\Participant\Guest\GuestRepository;
use kissj\Participant\Guest\GuestService;
use kissj\Participant\Ist\IstRepository;
use kissj\Participant\Ist\IstService;
use kissj\Participant\ParticipantController;
use kissj\Participant\ParticipantRepository;
use kissj\Participant\ParticipantService;
use kissj\Participant\Patrol\PatrolController;
use kissj\Participant\Patrol\PatrolLeaderRepository;
use kissj\Participant\Patrol\PatrolParticipantRepository;
use kissj\Participant\Patrol\PatrolService;
use kissj\Participant\Troop\TroopController;
use kissj\Participant\Troop\TroopLeaderRepository;
use kissj\Participant\Troop\TroopParticipantRepository;
use kissj\Participant\Troop\TroopService;
use kissj\Payment\PaymentRepository;
use kissj\Payment\PaymentService;
use kissj\Payment\QrCodeService;
use kissj\PdfGenerator\PdfGenerator;
use kissj\PdfGenerator\mPdfGenerator;
use kissj\Skautis\SkautisController;
use kissj\Skautis\SkautisFactory;
use kissj\Skautis\SkautisService;
use kissj\User\UserRegeneration;
use LeanMapper\Connection;
use LeanMapper\DefaultEntityFactory;
Expand Down Expand Up @@ -85,7 +138,68 @@ public function getContainerDefinition(string $envPath, string $envFilename): ar
$sentryHub = new SentryHub($sentryClient);
SentrySdk::setCurrentHub($sentryHub);

$container = [];
// autowired classes are not compiled automatically, hence here we about to tell them to DI
// https://php-di.org/doc/performances.html#optimizing-for-compilation
$container = [
AdminController::class => autowire(),
AdminRepository::class => autowire(),
AdminService::class => autowire(),
AdminsOnlyMiddleware::class => autowire(),
BankPaymentRepository::class => autowire(),
CheckLeaderParticipants::class => autowire(),
ChoosedRoleOnlyMiddleware::class => autowire(),
ContentArbiterGuest::class => autowire(),
ContentArbiterIst::class => autowire(),
ContentArbiterPatrolLeader::class => autowire(),
ContentArbiterPatrolParticipant::class => autowire(),
ContentArbiterTroopLeader::class => autowire(),
ContentArbiterTroopParticipant::class => autowire(),
EntryController::class => autowire(),
EventController::class => autowire(),
EventInfoMiddleware::class => autowire(),
EventRepository::class => autowire(),
EventService::class => autowire(),
ExportController::class => autowire(),
ExportService::class => autowire(),
FioBankPaymentService::class => autowire(),
FioBankReaderFactory::class => autowire(),
GuestRepository::class => autowire(),
GuestService::class => autowire(),
IstRepository::class => autowire(),
IstService::class => autowire(),
LocalizationResolverMiddleware::class => autowire(),
LoggedOnlyMiddleware::class => autowire(),
MonologAdditionalContextMiddleware::class => autowire(),
MonologContextMiddleware::class => autowire(),
NonChoosedRoleOnlyMiddleware::class => autowire(),
NonLoggedOnlyMiddleware::class => autowire(),
OpenStatusOnlyMiddleware::class => autowire(),
PaidStatusOnlyMiddleware::class => autowire(),
ParticipantController::class => autowire(),
ParticipantRepository::class => autowire(),
ParticipantService::class => autowire(),
PatrolController::class => autowire(),
PatrolLeaderRepository::class => autowire(),
PatrolLeadersOnlyMiddleware::class => autowire(),
PatrolParticipantRepository::class => autowire(),
PatrolService::class => autowire(),
PaymentRepository::class => autowire(),
PaymentService::class => autowire(),
PhpMailerWrapper::class => autowire(),
QrCodeService::class => autowire(),
SentryContextMiddleware::class => autowire(),
SentryHttpContextMiddleware::class => autowire(),
SkautisController::class => autowire(),
SkautisService::class => autowire(),
TroopController::class => autowire(),
TroopLeaderRepository::class => autowire(),
TroopLeadersOnlyMiddleware::class => autowire(),
TroopParticipantRepository::class => autowire(),
TroopParticipantsOnlyMiddleware::class => autowire(),
TroopService::class => autowire(),
UserAuthenticationMiddleware::class => autowire(),
];

$container[Connection::class] = function (): Connection {
return new Connection([
'driver' => 'postgre',
Expand Down Expand Up @@ -208,18 +322,6 @@ public function getContainerDefinition(string $envPath, string $envFilename): ar
return $view;
};

$container[UserAuthenticationMiddleware::class]
= fn (UserRegeneration $userRegeneration) => new UserAuthenticationMiddleware($userRegeneration);

$container[SentryHttpContextMiddleware::class]
= fn (SentryHub $sentryHub): SentryHttpContextMiddleware => new SentryHttpContextMiddleware($sentryHub);

$container[SentryContextMiddleware::class]
= fn (SentryHub $sentryHub): SentryContextMiddleware => new SentryContextMiddleware($sentryHub);

$container[MonologContextMiddleware::class]
= fn (Logger $logger): MonologContextMiddleware => new MonologContextMiddleware($logger);

return $container;
}

Expand Down

0 comments on commit e03158d

Please sign in to comment.