View file app/Factories/AppFactory.php

File size: 1.11Kb
<?php

declare(strict_types=1);

namespace App\Factories;

use DI\Bridge\Slim\Bridge;
use DI\Container;
use Slim\App;

/**
 * App Factory.
 */
class AppFactory extends Container
{
    protected static ?App $instance = null;

    /**
     * Create the shared instance of the container.
     *
     * @return App
     */
    public static function createInstance(): App
    {
        // Instantiate PHP-DI ContainerBuilder
        $container = require __DIR__ . '/../container.php';

        // Instantiate App
        $app = Bridge::create($container);

        // Register middleware
        $middleware = require __DIR__ . '/../middleware.php';
        $middleware($app);

        // Register routes
        $routes = require __DIR__ . '/../routes.php';
        $routes($app);

        return static::$instance = $app;
    }

    /**
     * Get the globally available instance of the container
     *
     * @return App
     */
    public static function getInstance(): App
    {
        if (static::$instance === null) {
            static::$instance = static::createInstance();
        }

        return static::$instance;
    }
}