# Change Log ## v2.0.0 ### Changed - Dropped support for PHP 7.x - The `Mongo` data source adapter has been updated to work with the `mongodb` extension instead of the old `mongo` extension. This brings back full li₃ support for MongoDB on PHP 7.x. Due to how the new extension works, we do not support GridFS through the adapter anymore. You can still access GridFS using the underlying connection object. (Simon Jaillet, Dirk Brünsicke) - Removed deprecated functionality: magic download header in action response, unit testing's expectException method. (David Persson) - ConfigExceptions (thrown when accessing non existent configurations) are now allowed to bubble up in `Cache`. - The following previously deprecated things have been removed: - The `XCache` `Cache` adapter - Glob brace support in `Libraries` - Per adapter filters - The `String` class - Long options like `--foo-bar` are now only made available as `fooBar` and not `foo-bar` after parsing in the console router. - The test `Mocker` class - Support for `mcrypt` in the sesion `Encrypt` strategy - Support for old-style rendering instructions i.e. `['template' => '/path/to/template']` - The `FirePhp` logging adapter - Support for old-style AOP filters - Support for gernally retrieving class parents via `_parents()`, it is still possible to call this method in subclasses of `Controller` and `Model`. - Support for generally halting executing via `_stop()`, it is still possible to call this method in subclasses of `Controller` and `Command. - Support for generally using `__set_state()`. - Support for generally using `respondsTo()`. - Support for generally using `invokeMethod()`. - Support for generally using `_instance()`. - The `Apc` adapter has been migrated from the traditional, now-unsupported APC extension, to [APCu](https://www.php.net/manual/en/book.apcu.php). No code changes are required—simply upgrade to the new extension. ## v1.2.0 ### Added - PHP 7.1 support - PHP 7.2 partial support, please read the note on extending from `*Object` below - PHP 7.3 partial support, please read the note on extending from `*Object` below - The `li3_fixtures` library is now part of the framework `test` package. - Data sources now support the `nested` strategy which will embed related records/documents by fetching them using additional queries. (jails) This strategy is auto-enabled on NoSQL-style databases where documents now do not have to be fetched manually anymore. For classic relational databases the new strategy can be enabled on a per query basis, if preferred over the default `joined` strategy: ``` Galleries::find('all', ['with' => 'Images', 'strategy' => 'nested']) ``` Please note that records/documents - fetched using this strategy - cannot be further constrained by conditions. - `Cache::key()` learned to generate safe cache keys. Where each adapter defines what "safe" means. The method was all in all made more flexible and feature rich as it added support for reusable and key mutating generator functions as well as support for key generation by passing any form of data. - `action\Request` is now (via `$this->request->is('dnt')`) able to detect if the _Do Not Track_ feature is enabled. - The auto-library feature for scoped routes can now be disabled, so it's possible to i.e. have an app and an admin scope, where the admin scope itself contains several admin libraries. - `openssl_random_pseudo_bytes()` has been added as a new RNG source. - Added `core\MergeInheritable` trait which allows classes to merge their array properties with such properties defined in class parents. Used mainly for merging `action\Controller::$_render` and `data\Model` properties. Also slightly optimizes memory usage in said classes. - The `Response` now knows about HTTP status code 426 (Upgrade Required). - The `Encrypt` session strategy now uses the `openssl` extension for symmetric encryption for better support and performance, whenever possible. Previously the, now deprecated, `mcrypt` extension was always used. When `openssl` cannot be used as a drop in, the strategy will fall back to `mcrypt` usage (aka _legacy_ mode). This is the case when a non-default cipher mode (anything else than AES 256 CBC) has been chosen or the `openssl` extension is not available. - The credit card validator now supports MasterCard 2-series. (Grayson Scherer) - `Libraries::instance()` now accepts a class map as a 4th parameter. - `Helper::attributes()` is now part of the public API. - `Model::hasFinder()` checks if a given finder is available, works for magic finders, too. - `Validator::has()` checks if a rule is available under given name. ### Changed - The undocumented feature in `Cache::{write,read,delete,increment,decrement}()`, where these methods supported callables as keys has been removed. Keys can now be of scalar type only. - `Cache::key()` now requires a cache configuration name as it's first argument. - Dropped support for PHP 5.5 - The `Encrypt` strategy now depends on the `openssl` extension, when it does not operate in _legacy_ mode (see above). In this case it also doesn't depend on the `mcrypt` extension anymore. - With HTML5 stating the type when linking or embedding scripts and styles using `text/css` and `text/javascript` has become unnecessary. The `Html` helper will now generate ``, `