mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-05 22:14:59 +02:00
[ticket/14306] Automatically enable a safe mode when container building fails
PHPBB3-14306
This commit is contained in:
parent
f6524f4902
commit
78349ed80f
@ -146,3 +146,11 @@ function popup(url, width, height, name)
|
|||||||
|
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<div class="main">
|
<div class="main">
|
||||||
|
<!-- IF CONTAINER_EXCEPTION !== false -->
|
||||||
|
<div class="errorbox">
|
||||||
|
<p>{L_CONTAINER_EXCEPTION}</p>
|
||||||
|
<p>{L_CONTAINER_EXCEPTION_DETAIL}</p>
|
||||||
|
<p>Exception message: {{ CONTAINER_EXCEPTION.getMessage() }}</p>
|
||||||
|
<pre>{{ CONTAINER_EXCEPTION.getTraceAsString() }}</pre>
|
||||||
|
</div>
|
||||||
|
<!-- ENDIF -->
|
||||||
|
@ -26,7 +26,7 @@ function adm_page_header($page_title)
|
|||||||
{
|
{
|
||||||
global $config, $db, $user, $template;
|
global $config, $db, $user, $template;
|
||||||
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID, $_SID;
|
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID, $_SID;
|
||||||
global $phpbb_dispatcher;
|
global $phpbb_dispatcher, $phpbb_container;
|
||||||
|
|
||||||
if (defined('HEADER_INC'))
|
if (defined('HEADER_INC'))
|
||||||
{
|
{
|
||||||
@ -105,6 +105,8 @@ function adm_page_header($page_title)
|
|||||||
'S_CONTENT_ENCODING' => 'UTF-8',
|
'S_CONTENT_ENCODING' => 'UTF-8',
|
||||||
'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right',
|
'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right',
|
||||||
'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left',
|
'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left',
|
||||||
|
|
||||||
|
'CONTAINER_EXCEPTION' => $phpbb_container->hasParameter('container_exception') ? $phpbb_container->getParameter('container_exception') : false,
|
||||||
));
|
));
|
||||||
|
|
||||||
// An array of http headers that phpbb will set. The following event may override these.
|
// An array of http headers that phpbb will set. The following event may override these.
|
||||||
|
@ -90,7 +90,7 @@ class container_builder
|
|||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $custom_parameters = null;
|
protected $custom_parameters = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \phpbb\config_php_file
|
* @var \phpbb\config_php_file
|
||||||
@ -126,67 +126,80 @@ class container_builder
|
|||||||
*/
|
*/
|
||||||
public function get_container()
|
public function get_container()
|
||||||
{
|
{
|
||||||
$container_filename = $this->get_container_filename();
|
try {
|
||||||
$config_cache = new ConfigCache($container_filename, defined('DEBUG'));
|
$container_filename = $this->get_container_filename();
|
||||||
if ($this->use_cache && $config_cache->isFresh())
|
$config_cache = new ConfigCache($container_filename, defined('DEBUG'));
|
||||||
{
|
if ($this->use_cache && $config_cache->isFresh())
|
||||||
require($config_cache->getPath());
|
|
||||||
$this->container = new \phpbb_cache_container();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->container_extensions = array(new extension\core($this->get_config_path()));
|
|
||||||
|
|
||||||
if ($this->use_extensions)
|
|
||||||
{
|
{
|
||||||
$this->load_extensions();
|
require($config_cache->getPath());
|
||||||
|
$this->container = new \phpbb_cache_container();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// Inject the config
|
|
||||||
if ($this->config_php_file)
|
|
||||||
{
|
{
|
||||||
$this->container_extensions[] = new extension\config($this->config_php_file);
|
$this->container_extensions = array(new extension\core($this->get_config_path()));
|
||||||
}
|
|
||||||
|
|
||||||
$this->container = $this->create_container($this->container_extensions);
|
if ($this->use_extensions)
|
||||||
|
|
||||||
// Easy collections through tags
|
|
||||||
$this->container->addCompilerPass(new pass\collection_pass());
|
|
||||||
|
|
||||||
// Event listeners "phpBB style"
|
|
||||||
$this->container->addCompilerPass(new RegisterListenersPass('dispatcher', 'event.listener_listener', 'event.listener'));
|
|
||||||
|
|
||||||
// Event listeners "Symfony style"
|
|
||||||
$this->container->addCompilerPass(new RegisterListenersPass('dispatcher'));
|
|
||||||
|
|
||||||
if ($this->use_extensions)
|
|
||||||
{
|
|
||||||
$this->register_ext_compiler_pass();
|
|
||||||
}
|
|
||||||
|
|
||||||
$filesystem = new filesystem();
|
|
||||||
$loader = new YamlFileLoader($this->container, new FileLocator($filesystem->realpath($this->get_config_path())));
|
|
||||||
$loader->load($this->container->getParameter('core.environment') . '/config.yml');
|
|
||||||
|
|
||||||
$this->inject_custom_parameters();
|
|
||||||
|
|
||||||
if ($this->compile_container)
|
|
||||||
{
|
|
||||||
$this->container->compile();
|
|
||||||
|
|
||||||
if ($this->use_cache)
|
|
||||||
{
|
{
|
||||||
$this->dump_container($config_cache);
|
$this->load_extensions();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inject the config
|
||||||
|
if ($this->config_php_file)
|
||||||
|
{
|
||||||
|
$this->container_extensions[] = new extension\config($this->config_php_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->container = $this->create_container($this->container_extensions);
|
||||||
|
|
||||||
|
// Easy collections through tags
|
||||||
|
$this->container->addCompilerPass(new pass\collection_pass());
|
||||||
|
|
||||||
|
// Event listeners "phpBB style"
|
||||||
|
$this->container->addCompilerPass(new RegisterListenersPass('dispatcher', 'event.listener_listener', 'event.listener'));
|
||||||
|
|
||||||
|
// Event listeners "Symfony style"
|
||||||
|
$this->container->addCompilerPass(new RegisterListenersPass('dispatcher'));
|
||||||
|
|
||||||
|
if ($this->use_extensions)
|
||||||
|
{
|
||||||
|
$this->register_ext_compiler_pass();
|
||||||
|
}
|
||||||
|
|
||||||
|
$filesystem = new filesystem();
|
||||||
|
$loader = new YamlFileLoader($this->container, new FileLocator($filesystem->realpath($this->get_config_path())));
|
||||||
|
$loader->load($this->container->getParameter('core.environment') . '/config.yml');
|
||||||
|
|
||||||
|
$this->inject_custom_parameters();
|
||||||
|
|
||||||
|
if ($this->compile_container)
|
||||||
|
{
|
||||||
|
$this->container->compile();
|
||||||
|
|
||||||
|
if ($this->use_cache)
|
||||||
|
{
|
||||||
|
$this->dump_container($config_cache);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->compile_container && $this->config_php_file)
|
if ($this->compile_container && $this->config_php_file)
|
||||||
|
{
|
||||||
|
$this->container->set('config.php', $this->config_php_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->container;
|
||||||
|
}
|
||||||
|
catch (\Exception $e)
|
||||||
{
|
{
|
||||||
$this->container->set('config.php', $this->config_php_file);
|
return $this
|
||||||
|
->without_extensions()
|
||||||
|
->without_cache()
|
||||||
|
->with_custom_parameters(array_merge($this->custom_parameters, [
|
||||||
|
'container_exception' => $e,
|
||||||
|
]))
|
||||||
|
->get_container()
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->container;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -451,13 +464,11 @@ class container_builder
|
|||||||
*/
|
*/
|
||||||
protected function inject_custom_parameters()
|
protected function inject_custom_parameters()
|
||||||
{
|
{
|
||||||
if ($this->custom_parameters !== null)
|
foreach ($this->custom_parameters as $key => $value)
|
||||||
{
|
{
|
||||||
foreach ($this->custom_parameters as $key => $value)
|
$this->container->setParameter($key, $value);
|
||||||
{
|
|
||||||
$this->container->setParameter($key, $value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user