<?php
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\Parameter;
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
class ProjectServiceContainer extends Container {
public function __construct() {
$this->parameters = $this
->getDefaultParameters();
$this->services = $this->scopedServices = $this->scopeStacks = array();
$this
->set('service_container', $this);
$this->scopes = array();
$this->scopeChildren = array();
$this->methodMap = array(
'bar' => 'getBarService',
'baz' => 'getBazService',
'depends_on_request' => 'getDependsOnRequestService',
'factory_service' => 'getFactoryServiceService',
'foo' => 'getFooService',
'foo.baz' => 'getFoo_BazService',
'foo_bar' => 'getFooBarService',
'foo_with_inline' => 'getFooWithInlineService',
'method_call1' => 'getMethodCall1Service',
'request' => 'getRequestService',
);
$this->aliases = array(
'alias_for_alias' => 'foo',
'alias_for_foo' => 'foo',
);
}
protected function getBarService() {
$this->services['bar'] = $instance = new \FooClass('foo', $this
->get('foo.baz'), $this
->getParameter('foo_bar'));
$this
->get('foo.baz')
->configure($instance);
return $instance;
}
protected function getBazService() {
$this->services['baz'] = $instance = new \Baz();
$instance
->setFoo($this
->get('foo_with_inline'));
return $instance;
}
protected function getDependsOnRequestService() {
$this->services['depends_on_request'] = $instance = new \stdClass();
$instance
->setRequest($this
->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
return $instance;
}
protected function getFactoryServiceService() {
return $this->services['factory_service'] = $this
->get('foo.baz')
->getInstance();
}
protected function getFooService() {
$a = $this
->get('foo.baz');
$this->services['foo'] = $instance = call_user_func(array(
'FooClass',
'getInstance',
), 'foo', $a, array(
'bar' => 'foo is bar',
'foobar' => 'bar',
), true, $this);
$instance
->setBar($this
->get('bar'));
$instance
->initialize();
$instance->foo = 'bar';
$instance->moo = $a;
sc_configure($instance);
return $instance;
}
protected function getFoo_BazService() {
$this->services['foo.baz'] = $instance = call_user_func(array(
'BazClass',
'getInstance',
));
call_user_func(array(
'BazClass',
'configureStatic1',
), $instance);
return $instance;
}
protected function getFooBarService() {
return new \FooClass();
}
protected function getFooWithInlineService() {
$a = new \Bar();
$this->services['foo_with_inline'] = $instance = new \Foo();
$a
->setBaz($this
->get('baz'));
$a->pub = 'pub';
$instance
->setBar($a);
return $instance;
}
protected function getMethodCall1Service() {
require_once '%path%foo.php';
$this->services['method_call1'] = $instance = new \FooClass();
$instance
->setBar($this
->get('foo'));
$instance
->setBar(NULL);
return $instance;
}
protected function getRequestService() {
throw new RuntimeException('You have requested a synthetic service ("request"). The DIC does not know how to construct this service.');
}
protected function synchronizeRequestService() {
if ($this
->initialized('depends_on_request')) {
$this
->get('depends_on_request')
->setRequest($this
->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
}
}
public function getParameter($name) {
$name = strtolower($name);
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters))) {
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
}
return $this->parameters[$name];
}
public function hasParameter($name) {
$name = strtolower($name);
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters);
}
public function setParameter($name, $value) {
throw new LogicException('Impossible to call set() on a frozen ParameterBag.');
}
public function getParameterBag() {
if (null === $this->parameterBag) {
$this->parameterBag = new FrozenParameterBag($this->parameters);
}
return $this->parameterBag;
}
protected function getDefaultParameters() {
return array(
'baz_class' => 'BazClass',
'foo_class' => 'FooClass',
'foo' => 'bar',
);
}
}