1. Go to this page and download the library: Download divineniiquaye/rade-di library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
divineniiquaye / rade-di example snippets
use Rade\DI\Container;
$container = new Container();
use function Rade\DI\Loader\{service, wrap};
// define some services
$container->set('session_storage', new SessionStorage('SESSION_ID'));
// or this for default autowiring typed support
$container->autowire('session_storage', new SessionStorage('SESSION_ID'));
$container->set('session', static fn(): Session => new Session($container['session_storage']));
// or
$container->set('session', wrap(Session::class));
// or further for autowiring
$container->set('session', service(Session::class))->autowire();
use Rade\DI\Definition;
// define some services
$container['session_storage'] = new SessionStorage('SESSION_ID');
$container['session'] = fn(): Session => new Session($container['session_storage']);
// or
$container['session'] = new Definition(Session::class);
// or
$container['session'] = $container->call(Session::class);
// or further
$container['session'] = new Session($container['session_storage']);
// get the session object
$session = $container->get('session');
// or using ArrayAccess
$session = $container['session'];
// or use it's service class name, parent classes or interfaces
$session = $container->get(Session::class);
// the above call is roughly equivalent to the following code:
$storage = new SessionStorage('SESSION_ID');
$session = new Session($storage);
use function Rade\DI\Loader\{service, reference};
$container['session'] = service(Session::class, [reference('session_storage')])->shared(false);
$container['film'] = new Movie('S1', 'EP202');
$container->alias('movie', 'film');
// Can be access by $container['film'] or $container['movie']
$container['speed.report'] = new SpeedReport(...);
$container['memory.report'] = new MemoryReport(...);
$container->tags(['reports' => ['speed.report', 'memory.report']]);
// or if autowired or not
$container->tags(['reports' => [SpeedReport::class, MemoryReport::class]]);
$tags = $container->tagged('reports');
$reports = [];
foreach ($tags as $report => $attr) {
$reports[] = $report;
}
$manager = new ReportAggregator($reports);
// For the $attr var, this is useful if you need tag to have extra values. eg:
$container->tags(['process' => [BackupProcessor::class, MonitorProcessor::class, CacheProcessor::class => false]]);
foreach ($container->tagged('process') as $process => $enabled) {
if ($enabled) {
$manager->addProcessor($container->get($process));
}
}
use Rade\DI\Attribute\Inject;
use Rade\DI\Injector\InjectableInterface;
class FooClass implements InjectableInterface
{
#[Inject]
public Service2 $service2;
private Service1 $service1;
#[Inject]
public function injectService1(Service1 $service)
{
$this->service1 = $service1;
}
public function getService1(): Service1
{
return $this->service1;
}
}
use Rade\DI\Container;
class FooProvider implements Rade\DI\Extensions\ExtensionInterface
{
/**
* {@inheritdoc}
*/
public function register(AbstractContainer $container, array $configs = []): void
{
// register some services and parameters
// on $container
}
}
$container->register(new FooProvider());
use Monolog\Logger;
use Rade\DI\ServiceLocator;
use Psr\Container\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Contracts\Service\ServiceSubscriberInterface;
class MyService implements ServiceSubscriberInterface
{
/**
* "logger" must be an instance of Psr\Log\LoggerInterface
* "event_dispatcher" must be an instance of Symfony\Component\EventDispatcher\EventDispatcherInterface
*/
public function __construct(private ServiceProviderInterface $container = null)
{
}
/**
* {@inheritdoc}
*/
public static function getSubscribedServices(): array
{
return ['logger', 'event_dispatcher' => 'dispatcher'];
}
}
$container['logger'] = new Monolog\Logger();
$container['dispatcher'] = new EventDispatcher();
$container['service'] = MyService::class;
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.