Adding the config services to the container and removing the bootstrap_variables call from before the kernel boot, plus other minor adjustments

8.0.x
Katherine Bailey 2012-07-07 12:57:46 -07:00
parent e54fc07904
commit d7dd619021
4 changed files with 96 additions and 57 deletions

View File

@ -2450,7 +2450,7 @@ function drupal_get_bootstrap_phase() {
* The instance of the Drupal Container used to set up and maintain object
* instances.
*/
function drupal_container(ContainerBuilder $reset = NULL) {
function drupal_container(Container $reset = NULL) {
// We do not use drupal_static() here because we do not have a mechanism by
// which to reinitialize the stored objects, so a drupal_static_reset() call
// would leave Drupal in a nonfunctional state.
@ -2460,14 +2460,13 @@ function drupal_container(ContainerBuilder $reset = NULL) {
}
elseif (!isset($container)) {
// This will only ever happen if an error has been thrown. Just build a new
// ContainerBuilder with only the language_interface and language_content
// services.
// ContainerBuilder with only the language_interface service.
$container = new ContainerBuilder();
// An interface language always needs to be available for t() and other
// functions. This default is overridden by drupal_language_initialize()
// during language negotiation.
$container->register(LANGUAGE_TYPE_INTERFACE, 'Drupal\\Core\\Language\\Language');
$container->register(LANGUAGE_TYPE_CONTENT, 'Drupal\\Core\\Language\\Language');
}
return $container;
}

View File

@ -21,6 +21,7 @@ class DrupalBundle extends Bundle
$info += array(
'tags' => array(),
'references' => array(),
'parameters' => array(),
'methods' => array(),
'arguments' => array(),
);
@ -32,6 +33,11 @@ class DrupalBundle extends Bundle
$definition = new Definition($info['class'], $references);
foreach ($info['parameters'] as $key => $param) {
$container->setParameter($key, $param);
$definition->addArgument("%{$key}%");
}
if (isset($info['factory_class']) && isset($info['factory_method'])) {
$definition->setFactoryClass($info['factory_class']);
$definition->setFactoryMethod($info['factory_method']);
@ -63,6 +69,31 @@ class DrupalBundle extends Bundle
*/
function getDefinitions() {
return array(
// Register configuration storage dispatcher.
'config.storage.dispatcher' => array(
'class' => 'Drupal\Core\Config\StorageDispatcher',
'parameters' => array(
'conifg.storage.info' => array(
'Drupal\Core\Config\DatabaseStorage' => array(
'connection' => 'default',
'target' => 'default',
'read' => TRUE,
'write' => TRUE,
),
'Drupal\Core\Config\FileStorage' => array(
'directory' => config_get_config_directory(),
'read' => TRUE,
'write' => FALSE,
),
),
),
),
'config.factory' => array(
'class' => 'Drupal\Core\Config\ConfigFactory',
'references' => array(
'config.storage.dispatcher'
)
),
'dispatcher' => array(
'class' => 'Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher',
'references' => array(

View File

@ -18,63 +18,73 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
*/
class DrupalKernel extends Kernel {
public function registerBundles()
{
$bundles = array(
new DrupalBundle(),
);
$modules = array_keys(system_list('module_enabled'));
foreach ($modules as $module) {
$class = "\Drupal\{$module}\{$module}Bundle";
if (class_exists($class)) {
$bundles[] = new $class();
}
}
return $bundles;
public function registerBundles()
{
$bundles = array(
new DrupalBundle(),
);
// Rather than bootstrapping to a higher phase prior to booting the Kernel, which
// would ensure these files are loaded already, we want to boot the Kernel as
// early as possible in the bootstrapping phase.
// TODO: Somehow remove the necessity of calling system_list() to find out which
// bundles exist.
require_once DRUPAL_ROOT . '/core/includes/cache.inc';
require_once DRUPAL_ROOT . '/core/includes/module.inc';
require_once DRUPAL_ROOT . '/core/includes/database.inc';
$modules = array_keys(system_list('module_enabled'));
foreach ($modules as $module) {
$class = "\Drupal\{$module}\{$module}Bundle";
if (class_exists($class)) {
$bundles[] = new $class();
}
}
return $bundles;
}
/**
* Initializes the service container.
*/
protected function initializeContainer()
{
$this->container = $this->buildContainer();
$this->container->set('kernel', $this);
drupal_container($this->container);
}
/**
* Builds the service container.
*
* @return ContainerBuilder The compiled service container
*/
protected function buildContainer()
{
$container = $this->getContainerBuilder();
foreach ($this->bundles as $bundle) {
$bundle->build($container);
}
$container->compile();
return $container;
/**
* Initializes the service container.
*/
protected function initializeContainer()
{
$this->container = $this->buildContainer();
$this->container->set('kernel', $this);
drupal_container($this->container);
}
/**
* Builds the service container.
*
* @return ContainerBuilder The compiled service container
*/
protected function buildContainer()
{
$container = $this->getContainerBuilder();
foreach ($this->bundles as $bundle) {
$bundle->build($container);
}
$container->compile();
return $container;
}
/**
* Gets a new ContainerBuilder instance used to build the service container.
*
* @return ContainerBuilder
*/
protected function getContainerBuilder()
{
return new ContainerBuilder(new ParameterBag($this->getKernelParameters()));
}
/**
* Gets a new ContainerBuilder instance used to build the service container.
*
* @return ContainerBuilder
*/
protected function getContainerBuilder()
{
return new ContainerBuilder(new ParameterBag($this->getKernelParameters()));
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
// We have to define this method because it's not defined in the base class,
// but the LoaderInterface class is part of the config component, which we
// are not using, so this is badness :-/ The alternative is to not extend
// the base Kernel class and just implement the KernelInterface.
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
// We have to define this method because it's not defined in the base class
// but is part of the KernelInterface interface. However, the LoaderInterface
// class is part of the config component, which we are not using, so this
// is badness :-/
}
}

View File

@ -21,7 +21,6 @@ define('DRUPAL_ROOT', getcwd());
// Bootstrap the lowest level of what we need.
require_once DRUPAL_ROOT . '/core/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_CONFIGURATION);
drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES);
// Create a request object from the HTTPFoundation.
$request = Request::createFromGlobals();