From 2c0cf011969e34db2a8d66c7e5fcf76b4f9b3968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Wagner?= Date: Mon, 2 Jul 2018 13:35:05 +0200 Subject: [PATCH 1/6] Make Symfony directory structure configurable from outside (#65, #66) --- src/Configuration/DefaultConfiguration.php | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Configuration/DefaultConfiguration.php b/src/Configuration/DefaultConfiguration.php index da1bf7d..8c9e653 100644 --- a/src/Configuration/DefaultConfiguration.php +++ b/src/Configuration/DefaultConfiguration.php @@ -23,8 +23,13 @@ */ final class DefaultConfiguration extends AbstractConfiguration { + const SYMFONY_2 = 2; + const SYMFONY_3 = 3; + const SYMFONY_4 = 4; + // variables starting with an underscore are for internal use only private $_symfonyEnvironmentEnvVarName; // SYMFONY_ENV or APP_ENV + private $_symfonyDirectoryStructureVersion; // properties are defined as private so the developer doesn't see them when using // their IDE autocompletion. To simplify things, the builder defines setter @@ -65,7 +70,8 @@ public function __construct(string $localProjectDir) { parent::__construct(); $this->localProjectDir = $localProjectDir; - $this->setDefaultConfiguration(Kernel::MAJOR_VERSION, Kernel::MINOR_VERSION); + $this->guessSymfonyDirectoryStructure(Kernel::MAJOR_VERSION, Kernel::MINOR_VERSION); + $this->setDefaultConfiguration(); } // this proxy method is needed because the autocompletion breaks @@ -364,9 +370,27 @@ protected function getReservedServerProperties(): array return [Property::bin_dir, Property::config_dir, Property::console_bin, Property::cache_dir, Property::deploy_dir, Property::log_dir, Property::src_dir, Property::templates_dir, Property::web_dir]; } - private function setDefaultConfiguration(int $symfonyMajorVersion, $symfonyMinorVersion): void + private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfonyMinorVersion): void { if (2 === $symfonyMajorVersion) { + $this->_symfonyDirectoryStructureVersion = self::SYMFONY_2; + } elseif (3 === $symfonyMajorVersion && 4 < $symfonyMinorVersion) { + $this->_symfonyDirectoryStructureVersion = self::SYMFONY_3; + } elseif (4 === $symfonyMajorVersion || (3 === $symfonyMajorVersion && 4 >= $symfonyMinorVersion)) { + $this->_symfonyDirectoryStructureVersion = self::SYMFONY_4; + } + } + + public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = null): void + { + if (in_array($symfonyDirectoryStructureVersion, [self::SYMFONY_2, self::SYMFONY_3, self::SYMFONY_4])) { + $this->_symfonyDirectoryStructureVersion = $symfonyDirectoryStructureVersion; + } else { + $symfonyDirectoryStructureVersion = $this->_symfonyDirectoryStructureVersion; + } + + // TODO: Be a bit more clever and for example take composer.json extra configuration into account + if (self::SYMFONY_2 === $symfonyDirectoryStructureVersion) { $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; $this->setDirs('app', 'app/config', 'app/cache', 'app/logs', 'src', 'app/Resources/views', 'web'); $this->controllersToRemove(['web/app_*.php']); @@ -374,14 +398,14 @@ private function setDefaultConfiguration(int $symfonyMajorVersion, $symfonyMinor $this->sharedDirs = ['app/logs']; $this->writableDirs = ['app/cache/', 'app/logs/']; $this->dumpAsseticAssets = true; - } elseif (3 === $symfonyMajorVersion && 4 < $symfonyMinorVersion) { + } elseif (self::SYMFONY_3 === $symfonyDirectoryStructureVersion) { $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; $this->setDirs('bin', 'app/config', 'var/cache', 'var/logs', 'src', 'app/Resources/views', 'web'); $this->controllersToRemove(['web/app_*.php']); $this->sharedFiles = ['app/config/parameters.yml']; $this->sharedDirs = ['var/logs']; $this->writableDirs = ['var/cache/', 'var/logs/']; - } elseif (4 === $symfonyMajorVersion || (3 === $symfonyMajorVersion && 4 >= $symfonyMinorVersion)) { + } elseif (self::SYMFONY_4 === $symfonyDirectoryStructureVersion) { $this->_symfonyEnvironmentEnvVarName = 'APP_ENV'; $this->setDirs('bin', 'config', 'var/cache', 'var/log', 'src', 'templates', 'public'); $this->controllersToRemove([]); From a478488324bbe19d6e404fa0d4b8d103e4cc1303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Wagner?= Date: Mon, 2 Jul 2018 13:41:52 +0200 Subject: [PATCH 2/6] Adhere to builder pattern for newly publicized setDefaultConfiguration --- src/Configuration/DefaultConfiguration.php | 36 ++++++++++++---------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/Configuration/DefaultConfiguration.php b/src/Configuration/DefaultConfiguration.php index 8c9e653..ff39e25 100644 --- a/src/Configuration/DefaultConfiguration.php +++ b/src/Configuration/DefaultConfiguration.php @@ -365,23 +365,7 @@ public function resetOpCacheFor(string $homepageUrl): self return $this; } - protected function getReservedServerProperties(): array - { - return [Property::bin_dir, Property::config_dir, Property::console_bin, Property::cache_dir, Property::deploy_dir, Property::log_dir, Property::src_dir, Property::templates_dir, Property::web_dir]; - } - - private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfonyMinorVersion): void - { - if (2 === $symfonyMajorVersion) { - $this->_symfonyDirectoryStructureVersion = self::SYMFONY_2; - } elseif (3 === $symfonyMajorVersion && 4 < $symfonyMinorVersion) { - $this->_symfonyDirectoryStructureVersion = self::SYMFONY_3; - } elseif (4 === $symfonyMajorVersion || (3 === $symfonyMajorVersion && 4 >= $symfonyMinorVersion)) { - $this->_symfonyDirectoryStructureVersion = self::SYMFONY_4; - } - } - - public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = null): void + public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = null): self { if (in_array($symfonyDirectoryStructureVersion, [self::SYMFONY_2, self::SYMFONY_3, self::SYMFONY_4])) { $this->_symfonyDirectoryStructureVersion = $symfonyDirectoryStructureVersion; @@ -412,6 +396,24 @@ public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = $this->sharedDirs = ['var/log']; $this->writableDirs = ['var/cache/', 'var/log/']; } + + return $this; + } + + protected function getReservedServerProperties(): array + { + return [Property::bin_dir, Property::config_dir, Property::console_bin, Property::cache_dir, Property::deploy_dir, Property::log_dir, Property::src_dir, Property::templates_dir, Property::web_dir]; + } + + private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfonyMinorVersion): void + { + if (2 === $symfonyMajorVersion) { + $this->_symfonyDirectoryStructureVersion = self::SYMFONY_2; + } elseif (3 === $symfonyMajorVersion && 4 < $symfonyMinorVersion) { + $this->_symfonyDirectoryStructureVersion = self::SYMFONY_3; + } elseif (4 === $symfonyMajorVersion || (3 === $symfonyMajorVersion && 4 >= $symfonyMinorVersion)) { + $this->_symfonyDirectoryStructureVersion = self::SYMFONY_4; + } } private function setDirs(string $binDir, string $configDir, string $cacheDir, string $logDir, string $srcDir, string $templatesDir, string $webDir): void From 9310502d6540c61bcff0a84bd80c0b54471a2870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Wagner?= Date: Mon, 13 Aug 2018 12:45:43 +0200 Subject: [PATCH 3/6] Refactoring due to remarks in code review (#66) --- src/Configuration/DefaultConfiguration.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Configuration/DefaultConfiguration.php b/src/Configuration/DefaultConfiguration.php index ff39e25..ac35337 100644 --- a/src/Configuration/DefaultConfiguration.php +++ b/src/Configuration/DefaultConfiguration.php @@ -369,12 +369,9 @@ public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = { if (in_array($symfonyDirectoryStructureVersion, [self::SYMFONY_2, self::SYMFONY_3, self::SYMFONY_4])) { $this->_symfonyDirectoryStructureVersion = $symfonyDirectoryStructureVersion; - } else { - $symfonyDirectoryStructureVersion = $this->_symfonyDirectoryStructureVersion; } - // TODO: Be a bit more clever and for example take composer.json extra configuration into account - if (self::SYMFONY_2 === $symfonyDirectoryStructureVersion) { + if (self::SYMFONY_2 === $this->_symfonyDirectoryStructureVersion) { $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; $this->setDirs('app', 'app/config', 'app/cache', 'app/logs', 'src', 'app/Resources/views', 'web'); $this->controllersToRemove(['web/app_*.php']); @@ -382,14 +379,14 @@ public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = $this->sharedDirs = ['app/logs']; $this->writableDirs = ['app/cache/', 'app/logs/']; $this->dumpAsseticAssets = true; - } elseif (self::SYMFONY_3 === $symfonyDirectoryStructureVersion) { + } elseif (self::SYMFONY_3 === $this->_symfonyDirectoryStructureVersion) { $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; $this->setDirs('bin', 'app/config', 'var/cache', 'var/logs', 'src', 'app/Resources/views', 'web'); $this->controllersToRemove(['web/app_*.php']); $this->sharedFiles = ['app/config/parameters.yml']; $this->sharedDirs = ['var/logs']; $this->writableDirs = ['var/cache/', 'var/logs/']; - } elseif (self::SYMFONY_4 === $symfonyDirectoryStructureVersion) { + } elseif (self::SYMFONY_4 === $this->_symfonyDirectoryStructureVersion) { $this->_symfonyEnvironmentEnvVarName = 'APP_ENV'; $this->setDirs('bin', 'config', 'var/cache', 'var/log', 'src', 'templates', 'public'); $this->controllersToRemove([]); @@ -407,6 +404,7 @@ protected function getReservedServerProperties(): array private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfonyMinorVersion): void { + // TODO: Be a bit more clever and for example take composer.json extra configuration into account if (2 === $symfonyMajorVersion) { $this->_symfonyDirectoryStructureVersion = self::SYMFONY_2; } elseif (3 === $symfonyMajorVersion && 4 < $symfonyMinorVersion) { From 0326890179f7cd48a9df0351356e198b6819a143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Wagner?= Date: Thu, 10 Jan 2019 14:38:24 +0100 Subject: [PATCH 4/6] Change default configuration logic to work with Symfony 3.4 (thanks to @superpatty) --- src/Configuration/DefaultConfiguration.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Configuration/DefaultConfiguration.php b/src/Configuration/DefaultConfiguration.php index ac35337..44fa960 100644 --- a/src/Configuration/DefaultConfiguration.php +++ b/src/Configuration/DefaultConfiguration.php @@ -407,9 +407,9 @@ private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfo // TODO: Be a bit more clever and for example take composer.json extra configuration into account if (2 === $symfonyMajorVersion) { $this->_symfonyDirectoryStructureVersion = self::SYMFONY_2; - } elseif (3 === $symfonyMajorVersion && 4 < $symfonyMinorVersion) { + } elseif (3 === $symfonyMajorVersion && 4 > $symfonyMinorVersion) { $this->_symfonyDirectoryStructureVersion = self::SYMFONY_3; - } elseif (4 === $symfonyMajorVersion || (3 === $symfonyMajorVersion && 4 >= $symfonyMinorVersion)) { + } elseif (4 === $symfonyMajorVersion || (3 === $symfonyMajorVersion && 4 <= $symfonyMinorVersion)) { $this->_symfonyDirectoryStructureVersion = self::SYMFONY_4; } } From f404cd6e947a05d132c98ab5a9a90148964f4f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Wagner?= Date: Thu, 10 Jan 2019 14:46:25 +0100 Subject: [PATCH 5/6] Update Symfony version in Travis configuration so test jobs succeed --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ad6cc0f..74b994a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ matrix: - CHECK_PHP_SYNTAX="no" - php: 7.1 env: - - SYMFONY_VERSION="3.2.*" + - SYMFONY_VERSION="3.4.*" - CHECK_PHP_SYNTAX="yes" allow_failures: - php: nightly From e785dc8b1317491de701e32de4eb869fc9c4a19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Wagner?= Date: Thu, 10 Jan 2019 14:59:36 +0100 Subject: [PATCH 6/6] Decouple environment variable name from directory structure version (#84) --- src/Configuration/DefaultConfiguration.php | 27 +++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Configuration/DefaultConfiguration.php b/src/Configuration/DefaultConfiguration.php index 44fa960..91b8f3c 100644 --- a/src/Configuration/DefaultConfiguration.php +++ b/src/Configuration/DefaultConfiguration.php @@ -71,6 +71,7 @@ public function __construct(string $localProjectDir) parent::__construct(); $this->localProjectDir = $localProjectDir; $this->guessSymfonyDirectoryStructure(Kernel::MAJOR_VERSION, Kernel::MINOR_VERSION); + $this->setEnvironmentVarName(Kernel::MAJOR_VERSION); $this->setDefaultConfiguration(); } @@ -372,7 +373,6 @@ public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = } if (self::SYMFONY_2 === $this->_symfonyDirectoryStructureVersion) { - $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; $this->setDirs('app', 'app/config', 'app/cache', 'app/logs', 'src', 'app/Resources/views', 'web'); $this->controllersToRemove(['web/app_*.php']); $this->sharedFiles = ['app/config/parameters.yml']; @@ -380,14 +380,12 @@ public function setDefaultConfiguration(?int $symfonyDirectoryStructureVersion = $this->writableDirs = ['app/cache/', 'app/logs/']; $this->dumpAsseticAssets = true; } elseif (self::SYMFONY_3 === $this->_symfonyDirectoryStructureVersion) { - $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; $this->setDirs('bin', 'app/config', 'var/cache', 'var/logs', 'src', 'app/Resources/views', 'web'); $this->controllersToRemove(['web/app_*.php']); $this->sharedFiles = ['app/config/parameters.yml']; $this->sharedDirs = ['var/logs']; $this->writableDirs = ['var/cache/', 'var/logs/']; } elseif (self::SYMFONY_4 === $this->_symfonyDirectoryStructureVersion) { - $this->_symfonyEnvironmentEnvVarName = 'APP_ENV'; $this->setDirs('bin', 'config', 'var/cache', 'var/log', 'src', 'templates', 'public'); $this->controllersToRemove([]); $this->sharedDirs = ['var/log']; @@ -402,6 +400,15 @@ protected function getReservedServerProperties(): array return [Property::bin_dir, Property::config_dir, Property::console_bin, Property::cache_dir, Property::deploy_dir, Property::log_dir, Property::src_dir, Property::templates_dir, Property::web_dir]; } + /** + * Guess the directory structure of the project based on the framework version. + * Could be manually selected to a different structure on project setup, in that + * case the user should set the correct directory structure version in their + * deployment configuration. + * + * @param int $symfonyMajorVersion + * @param $symfonyMinorVersion + */ private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfonyMinorVersion): void { // TODO: Be a bit more clever and for example take composer.json extra configuration into account @@ -414,6 +421,20 @@ private function guessSymfonyDirectoryStructure(int $symfonyMajorVersion, $symfo } } + /** + * Set the name of the environment variable for Symfony depending on the framework version + * + * @param int $symfonyMajorVersion + */ + private function setEnvironmentVarName(int $symfonyMajorVersion): void + { + if ($symfonyMajorVersion > 3) { + $this->_symfonyEnvironmentEnvVarName = 'APP_ENV'; + } else { + $this->_symfonyEnvironmentEnvVarName = 'SYMFONY_ENV'; + } + } + private function setDirs(string $binDir, string $configDir, string $cacheDir, string $logDir, string $srcDir, string $templatesDir, string $webDir): void { $this->binDir = $binDir;