1. Go to this page and download the library: Download everon/factory 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/ */
everon / factory example snippets
class Foo
{
use Dependency\Setter\Logger;
}
$Container->register('Logger', function () use ($FactoryWorker) {
return $FactoryWorker->buildLogger();
});
trait Logger
{
/**
* @var LoggerInterface
*/
protected $Logger;
/**
* @inheritdoc
*/
public function getLogger()
{
return $this->Logger;
}
/**
* @inheritdoc
*/
public function setLogger(LoggerInterface $Logger)
{
$this->Logger = $Logger;
}
}
interface LoggerAwareInterface
{
/**
* @return LoggerInterface
*/
public function getLogger();
/**
* @param Logger LoggerInterface
*/
public function setLogger(LoggerInterface $Logger);
}
namespace Application\Modules\Logger\Dependency\Setter;
use Application\Modules\Logger\Dependency;
trait Logger
{
use Dependency\Logger;
}
$Factory->registerWorkerCallback('ApplicationFactoryWorker', function() use ($Factory) {
return $Factory->buildWorker(Application::class);
});
class ApplicationFactoryWorker extends AbstractWorker implements FactoryWorkerInterface
{
/**
* @inheritdoc
*/
protected function registerBeforeWork()
{
$this->getFactory()->registerWorkerCallback('ApplicationFactoryWorker', function () {
return $this->getFactory()->buildWorker(self::class);
});
}
/**
* @return Logger
*/
public function buildLogger()
{
$Logger = new Logger();
$this->getFactory()->injectDependencies(Logger::class, $Logger);
return $Logger;
}
/**
* @param LoggerInterface $Logger
* @param string $anotherArgument
* @param array $data
*
* @return ApplicationInterface
*/
public function buildApplication(LoggerInterface $Logger)
{
$Application = new Application($Logger);
$this->getFactory()->injectDependencies(Application::class, $Application);
return $Application;
}
/**
* @param LoggerInterface $Logger
*
* @return UserManagerInterface
*/
public function buildUserManager(LoggerInterface $Logger)
{
$UserManager = new UserManager($Logger);
$this->getFactory()->injectDependencies(UserManager::class, $UserManager);
return $UserManager;
}
}
$Container->register('Logger', function () use ($FactoryWorker) {
return $FactoryWorker->buildLogger();
});
$Container->register('UserManager', function () use ($FactoryWorker, $Container) {
$Logger = $Container->resolve('Logger');
return $FactoryWorker->buildUserManager($Logger);
});
$Container->register('Application', function () use ($FactoryWorker, $Container) {
$Logger = $Container->resolve('Logger');
return $FactoryWorker->buildApplication($UserManager, $Logger);
});