diff --git a/CHANGELOG-4.0.md b/CHANGELOG-4.0.md index 1940697c1ef..3e7d3c0b4e4 100644 --- a/CHANGELOG-4.0.md +++ b/CHANGELOG-4.0.md @@ -9,6 +9,7 @@ - Fixed `Phalcon\Storage\Adapter\Stream::getKeys()` bug in the absence of a directory with a prefix name [#14725](https://github.com/phalcon/cphalcon/issues/14725), [#14721](https://github.com/phalcon/cphalcon/pull/14721) - Fixed `Phalcon\Debug::onUncaughtException` Should accept `\Throwable` instead of `\Exception` as an argument [#14738](https://github.com/phalcon/cphalcon/pull/14738) - Fixed `Phalcon\Mvc\Model\Binder` to now correctly call `has` and `set` on the cache object [#14743](https://github.com/phalcon/cphalcon/pull/14743) +- Fixed `Phalcon\Config\ConfigFactory` to always add the correct extension [#14756](https://github.com/phalcon/cphalcon/issues/14756) # [4.0.2](https://github.com/phalcon/cphalcon/releases/tag/v4.0.1) (2020-01-12) ## Fixed diff --git a/phalcon/Config/ConfigFactory.zep b/phalcon/Config/ConfigFactory.zep index 13ca91dd023..b93900b56dc 100644 --- a/phalcon/Config/ConfigFactory.zep +++ b/phalcon/Config/ConfigFactory.zep @@ -101,7 +101,7 @@ class ConfigFactory extends AbstractFactory first = config["filePath"], second = null; - if !strpos(first, ".") { + if (empty(pathinfo(first, PATHINFO_EXTENSION))) { let first = first . "." . lcfirst(adapter); } diff --git a/tests/_data/assets/config/config-with.in-file.name.ini b/tests/_data/assets/config/config-with.in-file.name.ini new file mode 100644 index 00000000000..0d1b626f1a9 --- /dev/null +++ b/tests/_data/assets/config/config-with.in-file.name.ini @@ -0,0 +1,58 @@ +[annotations] +adapter = apcu +options.prefix = annotations +options.lifetime = 3600 + +[cache] +adapter = libmemcached +options.prefix = app-data + +[config] +adapter = ini +filePath = PATH_DATA"assets/config/config-with.in-file.name.ini" +filePathExtension = PATH_DATA"assets/config/config-with.in-file.name.ini" + +[database] +adapter = mysql +options.host = DATA_MYSQL_HOST +options.username = DATA_MYSQL_USER +options.password = DATA_MYSQL_PASS +options.dbname = DATA_MYSQL_NAME +options.port = DATA_MYSQL_PORT +options.charset = DATA_MYSQL_CHARSET + +[image] +adapter = imagick +file = PATH_DATA"assets/images/phalconphp.jpg" + +[logger] +name = "my-logger" +options.adapters.0.adapter = stream +options.adapters.0.options.name = PATH_OUTPUT"tests/logs/factory.log" +options.adapters.1.adapter = stream +options.adapters.1.options.name = PATH_OUTPUT"tests/logs/factory2.log" + +[paginator] +adapter = queryBuilder +options.limit = 20 +options.page = 1 + +[translate] +adapter = gettext +options.locale = en_US.utf8 +options.defaultDomain = messages +options.directory = PATH_DATA"assets/translation/gettext" +options.category = LC_MESSAGES + + + + +[session] +uniqueId = my-private-app +host = 127.0.0.1 +port = 11211 +persistent = true +lifetime = 3600 +prefix = my_ +adapter = Files + diff --git a/tests/unit/Config/ConfigFactory/LoadCest.php b/tests/unit/Config/ConfigFactory/LoadCest.php index cd6aeec8c1f..8392dd5321e 100644 --- a/tests/unit/Config/ConfigFactory/LoadCest.php +++ b/tests/unit/Config/ConfigFactory/LoadCest.php @@ -53,6 +53,22 @@ public function configFactoryLoadConfig(UnitTester $I) Ini::class, $ini ); + + //Issue 14756 + $configFile = dataDir('assets/config/config-with.in-file.name.ini'); + $ini = new Ini($configFile, INI_SCANNER_NORMAL); + $I->assertInstanceOf( + Ini::class, + $ini + ); + + /** @var Ini $ini */ + $ini = (new ConfigFactory())->load($ini->config->toArray()); + + $I->assertInstanceOf( + Ini::class, + $ini + ); } /**