Skip to content

Instantly share code, notes, and snippets.

@gabriel403
Created November 20, 2012 13:47
Show Gist options
  • Save gabriel403/4118049 to your computer and use it in GitHub Desktop.
Save gabriel403/4118049 to your computer and use it in GitHub Desktop.
SM with factories and SM config in application.ini
servicemanager.factory.differenceService = DifferenceServiceFactory
servicemanager.factory.differenceDatabase = DifferenceDatabaseFactory
servicemanager.factory.tableManager = TableManagerFactory
public function preDispatch()
{
$bootstrap = $this->getInvokeArg('bootstrap');
$aConfig = $bootstrap->getOptions();
$this->smConfig = $aConfig['servicemanager']
parent::preDispatch();
}
class DifferenceDatabaseFactory implements FactoryInterface {
public createService(ServiceManager $sm) {
$tableman = $sm->get('tableManager');
$table = $tableman->get('differencetable');
$diffdb = new DifferenceDatabase($table);
return $diffdb;
}
}
class DifferenceServiceFactory implements FactoryInterface {
public createService(ServiceManager $sm) {
$diffdb = $sm->get('differenceDatabase');
$diff = new DifferenceService();
$diff->setDb($diffdb);
return $diff;
}
}
interface FactoryInterface
{
public function createService(ServiceManager $serviceLocator);
}
class ServiceManager implements ServiceManagerInterface
{
protected function __construct()
{
//get config somehow
//set $this->services to config
}
public function set($serviceName, $serviceClass)
{
$this->services[$serviceName] = $serviceClass;
}
public function get($service)
{
$serviceimp = new $services[$service];
$serviceobj = $serviceimp->createService($this);
if ($serviceobj instanceof ServiceManagerAwareInterface)
{
$serviceobj->setServiceManager($this);
}
}
}
interface ServiceManagerAwareInterface
{
public function setServiceManager(ServiceManager $sm);
}
abstact class ServiceManagerAwareStaticAbstract
{
protected $servicemanager;
public __construct()
{
$this->servicemanager = ServiceManager::getInstance();
call_user_func_array(array('parent', '__construct'), func_get_args());
}
}
interface ServiceManagerInterface {
protected $services = [];
protected function __construct();
public function set($serviceName, $serviceClass);
public function get($service);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment