| Server IP : 65.108.144.40 / Your IP : 216.73.217.165 Web Server : Apache/2.4.52 (Ubuntu) System : Linux ubuntu-8gb-hel1-1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64 User : dev ( 1000) PHP Version : 8.2.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/html/project-slim/app/Container/ |
Upload File : |
<?php
namespace App\Container;
use DI\Container;
use DI\ContainerBuilder;
use App\Repositories\Interfaces\UserRepositoryInterface;
use App\Repositories\Interfaces\CompanyRepositoryInterface;
use App\Repositories\Interfaces\ReportRepositoryInterface;
use App\Repositories\UserRepository;
use App\Repositories\CompanyRepository;
use App\Repositories\ReportRepository;
use App\Services\AuthService;
use App\Services\UserService;
use App\Services\CompanyService;
use App\Services\ReportService;
use App\Validators\AuthValidator;
use App\Validators\UserValidator;
use App\Validators\CompanyValidator;
use App\Validators\ReportValidator;
class ServiceContainer
{
private static ?Container $container = null;
/**
* Get or create the container instance
*/
public static function getInstance(): Container
{
if (self::$container === null) {
self::$container = self::build();
}
return self::$container;
}
/**
* Build the dependency injection container
*/
private static function build(): Container
{
$builder = new ContainerBuilder();
// Get JWT settings
$jwtSettings = [
'secret' => $_ENV['JWT_SECRET'] ?? 'your-secret-key',
'algorithm' => $_ENV['JWT_ALGORITHM'] ?? 'HS256',
'expiry' => (int)($_ENV['JWT_EXPIRE_TIME'] ?? 3600),
'refresh_expiry' => (int)($_ENV['JWT_REFRESH_EXPIRE_TIME'] ?? 604800),
];
// Repository bindings
$builder->addDefinitions([
UserRepositoryInterface::class => \DI\autowire(UserRepository::class),
CompanyRepositoryInterface::class => \DI\autowire(CompanyRepository::class),
ReportRepositoryInterface::class => \DI\autowire(ReportRepository::class),
]);
// Service bindings
$builder->addDefinitions([
AuthService::class => \DI\create(AuthService::class)
->constructor(
\DI\get(UserRepositoryInterface::class),
$jwtSettings
),
UserService::class => \DI\autowire(UserService::class),
CompanyService::class => \DI\autowire(CompanyService::class),
ReportService::class => \DI\autowire(ReportService::class),
]);
// Validator bindings
$builder->addDefinitions([
AuthValidator::class => \DI\autowire(AuthValidator::class),
UserValidator::class => \DI\autowire(UserValidator::class),
CompanyValidator::class => \DI\autowire(CompanyValidator::class),
ReportValidator::class => \DI\autowire(ReportValidator::class),
]);
return $builder->build();
}
/**
* Get a service from the container
*/
public static function get(string $id)
{
return self::getInstance()->get($id);
}
/**
* Check if a service exists in the container
*/
public static function has(string $id): bool
{
return self::getInstance()->has($id);
}
/**
* Set a service in the container
*/
public static function set(string $id, $value): void
{
self::getInstance()->set($id, $value);
}
/**
* Register services in a DI container builder
*/
public static function registerServices(ContainerBuilder $builder): void
{
// Get JWT settings
$jwtSettings = [
'secret' => $_ENV['JWT_SECRET'] ?? 'your-secret-key',
'algorithm' => $_ENV['JWT_ALGORITHM'] ?? 'HS256',
'expiry' => (int)($_ENV['JWT_EXPIRE_TIME'] ?? 3600),
'refresh_expiry' => (int)($_ENV['JWT_REFRESH_EXPIRE_TIME'] ?? 604800),
];
// Repository bindings
$builder->addDefinitions([
UserRepositoryInterface::class => \DI\autowire(UserRepository::class),
CompanyRepositoryInterface::class => \DI\autowire(CompanyRepository::class),
ReportRepositoryInterface::class => \DI\autowire(ReportRepository::class),
]);
// Service bindings
$builder->addDefinitions([
AuthService::class => \DI\create(AuthService::class)
->constructor(
\DI\get(UserRepositoryInterface::class),
$jwtSettings
),
UserService::class => \DI\autowire(UserService::class),
CompanyService::class => \DI\autowire(CompanyService::class),
ReportService::class => \DI\autowire(ReportService::class),
]);
// Validator bindings
$builder->addDefinitions([
AuthValidator::class => \DI\autowire(AuthValidator::class),
UserValidator::class => \DI\autowire(UserValidator::class),
CompanyValidator::class => \DI\autowire(CompanyValidator::class),
ReportValidator::class => \DI\autowire(ReportValidator::class),
]);
}
}