Skip to content

Latest commit

 

History

History
195 lines (141 loc) · 4.48 KB

MigrateFromPimple.md

File metadata and controls

195 lines (141 loc) · 4.48 KB

Migrate from Pimple

Defining Services

Pimple

// define some services
$container['session_storage'] = static function (Container $container): SessionStorage {
    return new SessionStorage('SESSION_ID');
};

$container['session'] = static function (Container $container): Session {
    return new Session($container['session_storage']);
};

// get the session object
$session = $container['session'];

// the above call is roughly equivalent to the following code:
// $storage = new SessionStorage('SESSION_ID');
// $session = new Session($storage);

Chubbyphp

// define some services
$container->factory('session_storage', static function (): SessionStorage {
    return new SessionStorage('SESSION_ID');
});

$container->factory('session', static function (ContainerInterface $container): Session {
    return new Session($container->get('session_storage'));
});

// get the session object
$session = $container->get('session');

// the above call is roughly equivalent to the following code:
// $storage = new SessionStorage('SESSION_ID');
// $session = new Session($storage);

Defining Factory Services

Pimple

$container['session'] = $container->factory(static function (Container $container): Session {
    return new Session($container['session_storage']);
});

Chubbyphp

$container->prototypeFactory('session', static function (ContainerInterface $container): Session {
    return new Session($container->get('session_storage'));
});

Defining Parameters

Pimple

// define some parameters
$container['cookie_name'] = 'SESSION_ID';
$container['session_storage_class'] = 'SessionStorage';

$container['session_storage'] = static function (Container $container): SessionStorage {
    return new $container['session_storage_class']($container['cookie_name']);
};

Chubbyphp

// define some parameters
$container->factory('cookie_name', new Parameter('SESSION_ID'));
$container->factory('session_storage_class', new Parameter('SessionStorage'));

$container->factory('session_storage', static function (ContainerInterface $container): SessionStorage {
    $sessionStorageClass = $container->get('session_storage_class');

    return new $sessionStorageClass($container->get('cookie_name'));
});

Protecting Parameters

Pimple

$container['random_func'] = $container->protect(static function (): int {
    return rand();
});

Chubbyphp

$container->factory('random_func', new Parameter(static function (): int {
    return rand();
}));

Modifying Services after Definition

Pimple

$container['session_storage'] = static function (Container $container): SessionStorage {
    return new $container['session_storage_class']($container['cookie_name']);
};

$container->extend('session_storage', static function ($storage, $c): SessionStorage {
    $storage->...();

    return $storage;
});

Chubbyphp

$container->factory('session_storage', static function (ContainerInterface $container): SessionStorage {
    $sessionStorageClass = $container->get('session_storage_class');

    return new $sessionStorageClass($container->get('cookie_name'));
});

$container->factory('session_storage', static function (ContainerInterface $c, callable $previous): SessionStorage {
    $storage = $previous($c);

    $storage->...();

    return $storage;
});

Extending a Container

Pimple

class FooProvider implements Pimple\ServiceProviderInterface
{
    public function register(Container $pimple)
    {
        $container['session_storage'] = static function (Container $container): SessionStorage {
            return new $container['session_storage_class']($container['cookie_name']);
        };
    }
}

$pimple->register(new FooProvider());

Chubbyphp

class FooProvider
{
    public function __invoke(): array
    {
        return [
            'session_storage' => static function (ContainerInterface $container): SessionStorage {
                $sessionStorageClass = $container->get('session_storage_class');

                return new $sessionStorageClass($container->get('cookie_name'));
            },
        ];
    }
}

$container->factories((new FooProvider())());

Fetching the Service Creation Function

Pimple

$container['session'] = static function (Container $container): Session {
    return new Session($container['session_storage']);
};

$sessionFunction = $container->raw('session');

Chubbyphp

There is no equivalent to this functionality.