feature #28809 [HttpKernel] Deprecate the Kernel name (fabpot)

This PR was merged into the 4.2-dev branch.

Discussion
----------

[HttpKernel] Deprecate the Kernel name

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no     <!-- see https://symfony.com/bc -->
| Deprecations? | yes <!-- don't forget to update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass?   | yes    <!-- please add some, will be required by reviewers -->
| Fixed tickets | #26904
| License       | MIT
| Doc PR        | n/a

<!--
Write a short README entry for your feature/bugfix here (replace this comment block.)
This will help people understand your PR and can be used as a start of the Doc PR.
Additionally:
 - Bug fixes must be submitted against the lowest branch where they apply
   (lowest branches are regularly merged to upper ones so they get the fixes too).
 - Features and deprecations must be submitted against the master branch.
-->

Commits
-------

98ff750ee1 [HttpKernel] deprecated the Kernel name
This commit is contained in:
Fabien Potencier 2018-10-15 17:49:38 +02:00
commit 5fda7e2fb1
17 changed files with 61 additions and 40 deletions

View File

@ -367,7 +367,7 @@ abstract class AbstractDoctrineExtension extends Extension
} else { } else {
$seed = '_'.$container->getParameter('kernel.root_dir'); $seed = '_'.$container->getParameter('kernel.root_dir');
} }
$seed .= '.'.$container->getParameter('kernel.name').'.'.$container->getParameter('kernel.environment').'.'.$container->getParameter('kernel.debug'); $seed .= '.'.$container->getParameter('kernel.container_class').'.'.$container->getParameter('kernel.environment').'.'.$container->getParameter('kernel.debug');
$namespace = 'sf_'.$this->getMappingResourceExtension().'_'.$objectManagerName.'_'.ContainerBuilder::hash($seed); $namespace = 'sf_'.$this->getMappingResourceExtension().'_'.$objectManagerName.'_'.ContainerBuilder::hash($seed);
$cacheDriver['namespace'] = $namespace; $cacheDriver['namespace'] = $namespace;

View File

@ -271,7 +271,7 @@ class DoctrineExtensionTest extends TestCase
'kernel.cache_dir' => __DIR__, 'kernel.cache_dir' => __DIR__,
'kernel.debug' => false, 'kernel.debug' => false,
'kernel.environment' => 'test', 'kernel.environment' => 'test',
'kernel.name' => 'kernel', 'kernel.container_class' => 'kernel',
'kernel.root_dir' => __DIR__, 'kernel.root_dir' => __DIR__,
), $data))); ), $data)));
} }

View File

@ -71,7 +71,6 @@ EOT
array('<info>Kernel</>'), array('<info>Kernel</>'),
new TableSeparator(), new TableSeparator(),
array('Type', \get_class($kernel)), array('Type', \get_class($kernel)),
array('Name', $kernel->getName()),
array('Environment', $kernel->getEnvironment()), array('Environment', $kernel->getEnvironment()),
array('Debug', $kernel->isDebug() ? 'true' : 'false'), array('Debug', $kernel->isDebug() ? 'true' : 'false'),
array('Charset', $kernel->getCharset()), array('Charset', $kernel->getCharset()),

View File

@ -148,7 +148,7 @@ class Application extends BaseApplication
*/ */
public function getLongVersion() public function getLongVersion()
{ {
return parent::getLongVersion().sprintf(' (kernel: <comment>%s</>, env: <comment>%s</>, debug: <comment>%s</>)', $this->kernel->getName(), $this->kernel->getEnvironment(), $this->kernel->isDebug() ? 'true' : 'false'); return parent::getLongVersion().sprintf(' (env: <comment>%s</>, debug: <comment>%s</>)', $this->kernel->getEnvironment(), $this->kernel->isDebug() ? 'true' : 'false');
} }
public function add(Command $command) public function add(Command $command)

View File

@ -30,7 +30,7 @@ class CachePoolClearerPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');

View File

@ -35,7 +35,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');
$adapter = new Definition(); $adapter = new Definition();
@ -57,7 +57,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');
$container->register('cache.adapter.array', ArrayAdapter::class)->addArgument(0); $container->register('cache.adapter.array', ArrayAdapter::class)->addArgument(0);
@ -75,7 +75,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('cache.prefix.seed', 'foo'); $container->setParameter('cache.prefix.seed', 'foo');
$cachePool = new Definition(); $cachePool = new Definition();
@ -100,7 +100,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('cache.prefix.seed', 'foo'); $container->setParameter('cache.prefix.seed', 'foo');
$cachePool = new Definition(); $cachePool = new Definition();
@ -126,7 +126,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');
$adapter = new Definition(); $adapter = new Definition();

View File

@ -46,13 +46,9 @@ class AppKernel extends Kernel
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getName() public function getContainerClass()
{ {
if (null === $this->name) { return parent::getContainerClass().substr(md5($this->rootConfig), -16);
$this->name = parent::getName().substr(md5($this->rootConfig), -16);
}
return $this->name;
} }
public function registerBundles() public function registerBundles()

View File

@ -50,13 +50,6 @@
</span> </span>
</div> </div>
{% if 'n/a' is not same as(collector.appname) %}
<div class="sf-toolbar-info-piece">
<b>Kernel name</b>
<span>{{ collector.appname }}</span>
</div>
{% endif %}
{% if 'n/a' is not same as(collector.env) %} {% if 'n/a' is not same as(collector.env) %}
<div class="sf-toolbar-info-piece"> <div class="sf-toolbar-info-piece">
<b>Environment</b> <b>Environment</b>

View File

@ -52,7 +52,7 @@ class CachePoolPass implements CompilerPassInterface
} else { } else {
$seed = '_'.$container->getParameter('kernel.root_dir'); $seed = '_'.$container->getParameter('kernel.root_dir');
} }
$seed .= '.'.$container->getParameter('kernel.name').'.'.$container->getParameter('kernel.environment'); $seed .= '.'.$container->getParameter('kernel.container_class').'.'.$container->getParameter('kernel.environment');
$pools = array(); $pools = array();
$clearers = array(); $clearers = array();

View File

@ -27,7 +27,7 @@ class CachePoolClearerPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');

View File

@ -32,7 +32,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');
$adapter = new Definition(); $adapter = new Definition();
@ -54,7 +54,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');
$container->register('cache.adapter.array', ArrayAdapter::class)->addArgument(0); $container->register('cache.adapter.array', ArrayAdapter::class)->addArgument(0);
@ -72,7 +72,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('cache.prefix.seed', 'foo'); $container->setParameter('cache.prefix.seed', 'foo');
$cachePool = new Definition(); $cachePool = new Definition();
@ -97,7 +97,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('cache.prefix.seed', 'foo'); $container->setParameter('cache.prefix.seed', 'foo');
$cachePool = new Definition(); $cachePool = new Definition();
@ -123,7 +123,7 @@ class CachePoolPassTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.debug', false); $container->setParameter('kernel.debug', false);
$container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.container_class', 'app');
$container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.environment', 'prod');
$container->setParameter('kernel.root_dir', 'foo'); $container->setParameter('kernel.root_dir', 'foo');
$adapter = new Definition(); $adapter = new Definition();

View File

@ -1,6 +1,11 @@
CHANGELOG CHANGELOG
========= =========
4.2.0
-----
* deprecated `KernelInterface::getName()` and the `kernel.name` parameter
4.1.0 4.1.0
----- -----

View File

@ -60,7 +60,7 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte
'token' => $response->headers->get('X-Debug-Token'), 'token' => $response->headers->get('X-Debug-Token'),
'symfony_version' => Kernel::VERSION, 'symfony_version' => Kernel::VERSION,
'symfony_state' => 'unknown', 'symfony_state' => 'unknown',
'name' => isset($this->kernel) ? $this->kernel->getName() : 'n/a', 'name' => 'n/a',
'env' => isset($this->kernel) ? $this->kernel->getEnvironment() : 'n/a', 'env' => isset($this->kernel) ? $this->kernel->getEnvironment() : 'n/a',
'debug' => isset($this->kernel) ? $this->kernel->isDebug() : 'n/a', 'debug' => isset($this->kernel) ? $this->kernel->isDebug() : 'n/a',
'php_version' => PHP_VERSION, 'php_version' => PHP_VERSION,
@ -227,6 +227,8 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte
* Gets the application name. * Gets the application name.
* *
* @return string The application name * @return string The application name
*
* @deprecated since Symfony 4.2
*/ */
public function getAppName() public function getAppName()
{ {

View File

@ -58,6 +58,9 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
protected $environment; protected $environment;
protected $debug; protected $debug;
protected $booted = false; protected $booted = false;
/**
* @deprecated since Symfony 4.2
*/
protected $name; protected $name;
protected $startTime; protected $startTime;
@ -81,7 +84,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
$this->environment = $environment; $this->environment = $environment;
$this->debug = $debug; $this->debug = $debug;
$this->rootDir = $this->getRootDir(); $this->rootDir = $this->getRootDir();
$this->name = $this->getName(); $this->name = $this->getName(false);
} }
public function __clone() public function __clone()
@ -271,8 +274,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getName() public function getName(/* $triggerDeprecation = true */)
{ {
if (0 === \func_num_args() || func_get_arg(0)) {
@trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
}
if (null === $this->name) { if (null === $this->name) {
$this->name = preg_replace('/[^a-zA-Z0-9_]+/', '', basename($this->rootDir)); $this->name = preg_replace('/[^a-zA-Z0-9_]+/', '', basename($this->rootDir));
if (ctype_digit($this->name[0])) { if (ctype_digit($this->name[0])) {
@ -424,7 +431,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/ */
protected function getContainerClass() protected function getContainerClass()
{ {
return $this->name.ucfirst($this->environment).($this->debug ? 'Debug' : '').'ProjectContainer'; return str_replace('\\', '_', \get_class($this)).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container';
} }
/** /**
@ -579,6 +586,9 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
'kernel.project_dir' => realpath($this->getProjectDir()) ?: $this->getProjectDir(), 'kernel.project_dir' => realpath($this->getProjectDir()) ?: $this->getProjectDir(),
'kernel.environment' => $this->environment, 'kernel.environment' => $this->environment,
'kernel.debug' => $this->debug, 'kernel.debug' => $this->debug,
/*
* @deprecated since Symfony 4.2
*/
'kernel.name' => $this->name, 'kernel.name' => $this->name,
'kernel.cache_dir' => realpath($cacheDir = $this->warmupDir ?: $this->getCacheDir()) ?: $cacheDir, 'kernel.cache_dir' => realpath($cacheDir = $this->warmupDir ?: $this->getCacheDir()) ?: $cacheDir,
'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(), 'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(),

View File

@ -100,6 +100,8 @@ interface KernelInterface extends HttpKernelInterface, \Serializable
* Gets the name of the kernel. * Gets the name of the kernel.
* *
* @return string The kernel name * @return string The kernel name
*
* @deprecated since Symfony 4.2
*/ */
public function getName(); public function getName();

View File

@ -30,7 +30,7 @@ class ConfigDataCollectorTest extends TestCase
$this->assertSame('test', $c->getEnv()); $this->assertSame('test', $c->getEnv());
$this->assertTrue($c->isDebug()); $this->assertTrue($c->isDebug());
$this->assertSame('config', $c->getName()); $this->assertSame('config', $c->getName());
$this->assertSame('testkernel', $c->getAppName()); $this->assertSame('n/a', $c->getAppName());
$this->assertRegExp('~^'.preg_quote($c->getPhpVersion(), '~').'~', PHP_VERSION); $this->assertRegExp('~^'.preg_quote($c->getPhpVersion(), '~').'~', PHP_VERSION);
$this->assertRegExp('~'.preg_quote((string) $c->getPhpVersionExtra(), '~').'$~', PHP_VERSION); $this->assertRegExp('~'.preg_quote((string) $c->getPhpVersionExtra(), '~').'$~', PHP_VERSION);
$this->assertSame(PHP_INT_SIZE * 8, $c->getPhpArchitecture()); $this->assertSame(PHP_INT_SIZE * 8, $c->getPhpArchitecture());

View File

@ -75,7 +75,7 @@ class KernelTest extends TestCase
$kernel->boot(); $kernel->boot();
$containerDir = __DIR__.'/Fixtures/cache/custom/'.substr(\get_class($kernel->getContainer()), 0, 16); $containerDir = __DIR__.'/Fixtures/cache/custom/'.substr(\get_class($kernel->getContainer()), 0, 16);
$this->assertTrue(unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta')); $this->assertTrue(unlink(__DIR__.'/Fixtures/cache/custom/FixturesSymfony_Component_HttpKernel_Tests_CustomProjectDirKernelCustomDebugContainer.php.meta'));
$this->assertFileExists($containerDir); $this->assertFileExists($containerDir);
$this->assertFileNotExists($containerDir.'.legacy'); $this->assertFileNotExists($containerDir.'.legacy');
@ -302,6 +302,9 @@ EOF;
$this->assertEquals(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures', realpath($kernel->getRootDir())); $this->assertEquals(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures', realpath($kernel->getRootDir()));
} }
/**
* @group legacy
*/
public function testGetName() public function testGetName()
{ {
$kernel = new KernelForTest('test', true); $kernel = new KernelForTest('test', true);
@ -309,6 +312,9 @@ EOF;
$this->assertEquals('Fixtures', $kernel->getName()); $this->assertEquals('Fixtures', $kernel->getName());
} }
/**
* @group legacy
*/
public function testOverrideGetName() public function testOverrideGetName()
{ {
$kernel = new KernelForOverrideName('test', true); $kernel = new KernelForOverrideName('test', true);
@ -506,6 +512,9 @@ EOF;
$this->assertTrue($kernel->getContainer()->getParameter('test_executed')); $this->assertTrue($kernel->getContainer()->getParameter('test_executed'));
} }
/**
* @group legacy
*/
public function testKernelRootDirNameStartingWithANumber() public function testKernelRootDirNameStartingWithANumber()
{ {
$dir = __DIR__.'/Fixtures/123'; $dir = __DIR__.'/Fixtures/123';
@ -532,14 +541,14 @@ EOF;
$containerClass = \get_class($kernel->getContainer()); $containerClass = \get_class($kernel->getContainer());
$containerFile = (new \ReflectionClass($kernel->getContainer()))->getFileName(); $containerFile = (new \ReflectionClass($kernel->getContainer()))->getFileName();
unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta'); unlink(__DIR__.'/Fixtures/cache/custom/FixturesSymfony_Component_HttpKernel_Tests_CustomProjectDirKernelCustomDebugContainer.php.meta');
$kernel = new CustomProjectDirKernel(); $kernel = new CustomProjectDirKernel();
$kernel->boot(); $kernel->boot();
$this->assertInstanceOf($containerClass, $kernel->getContainer()); $this->assertInstanceOf($containerClass, $kernel->getContainer());
$this->assertFileExists($containerFile); $this->assertFileExists($containerFile);
unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta'); unlink(__DIR__.'/Fixtures/cache/custom/FixturesSymfony_Component_HttpKernel_Tests_CustomProjectDirKernelCustomDebugContainer.php.meta');
$kernel = new CustomProjectDirKernel(function ($container) { $container->register('foo', 'stdClass')->setPublic(true); }); $kernel = new CustomProjectDirKernel(function ($container) { $container->register('foo', 'stdClass')->setPublic(true); });
$kernel->boot(); $kernel->boot();
@ -707,9 +716,9 @@ class CustomProjectDirKernel extends Kernel
private $buildContainer; private $buildContainer;
private $httpKernel; private $httpKernel;
public function __construct(\Closure $buildContainer = null, HttpKernelInterface $httpKernel = null, $name = 'custom') public function __construct(\Closure $buildContainer = null, HttpKernelInterface $httpKernel = null, $env = 'custom')
{ {
parent::__construct($name, true); parent::__construct($env, true);
$this->baseDir = 'foo'; $this->baseDir = 'foo';
$this->buildContainer = $buildContainer; $this->buildContainer = $buildContainer;
@ -725,6 +734,11 @@ class CustomProjectDirKernel extends Kernel
{ {
} }
protected function getContainerClass()
{
return $this->name.parent::getContainerClass();
}
public function getProjectDir() public function getProjectDir()
{ {
return $this->baseDir; return $this->baseDir;