Appearance
<div style="display: none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /changelog/Changelog.4.92.md for this page in Markdown format</div>
Version 4
version 4.92
[4.92.12] feat(rest/domains):
BaseModel supports sub relation filtering
feat: respect filters when eager loading entities.
Querystring for not respecting is constrain=0
ListRequest sets constrainRelations to Model.
ListRequest typehint constructor vars [4.92.12] fix: chinese payway translations [4.92.11] feat: Translations for russian, italian, spanish and chinese [4.92.10] fix: query builder _compile_wh fix for large where in arrays [4.92.10] fix: Use standard query instead of query builder where in to fix the preg match limit [4.92.10] fix: phpoffice/phpspreadsheet CVE-2025-54370 [4.92.9] feat: Implement robust recursive loading and decouple relation logic *decouple the relationship-loading logic from the controller layer - fixes critical bugs related to deep recursion)
- Architectural Refactor & Decoupling:
- Centralized all relation-parsing logic into the
BaseModel, making it the single source of truth for how relationships are loaded. - Removed the
flattenRelationsmethod from theHandlesRestfulActionstrait. This decouples the Controller layer from the data-loading implementation details. - The Controller/Trait now only parses the request into a nested array and passes it transparently through the Service layer to the Model. This adheres to a "Smart Model, Dumb Controller" pattern, improving maintainability and reducing the surface area for bugs.
- Centralized all relation-parsing logic into the
- Fix for
OneToManyDeep Recursion (children*):- The
loadRecursiveChildrenmethod was rewritten from an iterativewhileloop to a proper recursive function. - This resolves the critical bug where only the last level of descendants was being attached, and now correctly builds the entire nested tree structure for relations like
children.
- The
- Fix for
BelongsToDeep Recursion (parent*):- The
loadRecursiveParentsmethod was similarly refactored to use recursion. - This fixes the issue where nested relations on ancestors (e.g.,
parent*.translations) were not being loaded beyond the immediate parent.
- The
- Architectural Refactor & Decoupling:
[4.92.9] task: allow loading relation model from di container instead of instantiating concrete class [4.92.9] fix: domain map container namespace [4.92.9] chore: remove not needed Entity::getData [4.92.8] task: Maps_model::addMapPoint returns null|string (also added typhints in signature) [4.92.8] feat: Maps_admin additional methods for allowing overriding. before add/edit record and record relations methods [4.92.8] fix: points/update return link [4.92.7] feat: Maps_admin render methods for clients (indexRender, addRender, editRender, pointRender, addPointRender, editPointRender) [4.92.7] fix: points/update view set_value for is_active checkbox [4.92.6] fix: points/{create|update} views invalid param for availableCountriesDropDown - change label for image [4.92.5] fix: Maps_admin::edit and Maps::edit_point page titles [4.92.4] fix: checking for invalid master record in Maps_admin:edit [4.92.4] task: update Maps_admin::edit_point rendering of mui fields to pass array of indexed records to avoid having to set up extra fields on overrides [4.92.4] fix: Maps_model getAdminRecord and getPoint methods checking result before calling row or result [4.92.4] refactor: Maps_admin gets post and mui post data from separate methods to allow easier field overriding, map location upload file to separate method [4.92.4] fix: error render setups request in base controller currentCurrency property which is declared in front controller and not in admin controller. [4.92.4] fix: Map\Entity typehint property [4.92.3] feat(rest): read updated example and info on container / collections/ resources / entities Rest Api Modules doc * Document (files) and Slider{Group\Slider\Slide} implementation * Update Collection and Resource interface * remove the need to set model property in collections / resources and entities using DiscoversModel trait which uses naming convention to get model class. It can be overriden from DI container or by setting the model property * split domain dependency injection from rest di [4.92.2] fix(Adv_category_admin): remove xss_clean for fulltext on add and edit methods [4.92.2] feat(rest): read updated for Resource Rest Api Modules doc * Map\Map and Map\Locations implementation * refactor: moved public resource::toArray to BaseResource. Actual resource mapping is now done in protected function resource * refactor: BaseResource::{addResourceToData|addCollectionToData} to remove boilerplate code from Resource implementation [4.92.1] feat(rest): read updated Rest Api Modules doc * Relations are managed from BaseModel. app models only setup relations in defineRelations() * Supported relations are one-to-many, one-to-one, many-to-many and belongs-to * recursion in relations (ie with=children*,children*.translations) * lazyload with magic __get and __call in BaseModel * rest/**/item to get resource with ListRequest like in index(list) [4.92.0] feat: rest for subcontent and page (category). read Rest Api Modules doc
Notes
[4.92.12] Run composer i in production to regenerate cached container [4.92.10] Check for overrides:
Product_model::getProductCodeImagesProduct_meta_model::getByProductIds
[4.92.10] Run composer i to get updated components
- updated components
- aws/aws-sdk-php (3.352.6 => 3.356.24)
- cakephp/core (4.6.1 => 4.6.2)
- cakephp/database (4.6.1 => 4.6.2)
- cakephp/datasource (4.6.1 => 4.6.2)
- cakephp/utility (4.6.1 => 4.6.2)
- dompdf/dompdf (v3.1.0 => v3.1.2)
- guzzlehttp/guzzle (7.9.3 => 7.10.0)
- guzzlehttp/promises (2.2.0 => 2.3.0)
- guzzlehttp/psr7 (2.7.1 => 2.8.0)
- matomo/device-detector (6.4.6 => 6.4.7)
- nikic/php-parser (v5.6.0 => v5.6.1)
- paragonie/constant_time_encoding (v3.0.0 => v3.1.2)
- phpoption/phpoption (1.9.3 => 1.9.4)
- phpoffice/phpspreadsheet (2.3.9 => 2.4.1)
- phpunit/phpunit (10.5.51 => 10.5.57)
- ramsey/uuid (4.9.0 => 4.9.1)
- sebastian/comparator (5.0.3 => 5.0.4)
- sebastian/exporter (5.1.2 => 5.1.4)
- squizlabs/php_codesniffer (3.13.2 => 4.0.0)
- symfony/console (v6.4.24 => v6.4.25)
- symfony/dependency-injection (v6.4.24 => v6.4.25)
- symfony/event-dispatcher (v6.4.24 => v6.4.25)
- symfony/framework-bundle (v6.4.24 => v6.4.25)
- symfony/http-foundation (v6.4.24 => v6.4.25)
- symfony/http-kernel (v6.4.24 => v6.4.25)
- symfony/monolog-bridge (v6.4.24 => v6.4.25)
- symfony/polyfill-ctype (v1.32.0 => v1.33.0)
- symfony/polyfill-intl-grapheme (v1.32.0 => v1.33.0)
- symfony/polyfill-intl-normalizer (v1.32.0 => v1.33.0)
- symfony/polyfill-mbstring (v1.32.0 => v1.33.0)
- symfony/polyfill-php80 (v1.32.0 => v1.33.0)
- symfony/polyfill-php83 (v1.32.0 => v1.33.0)
- symfony/process (v6.4.24 => v6.4.25)
- symfony/string (v6.4.24 => v6.4.25)
- symfony/var-dumper (v6.4.24 => v6.4.25)
- symfony/var-exporter (v6.4.24 => v6.4.25)
- symfony/yaml (v6.4.24 => v6.4.25)
[4.92.9] Run composer i in production to regenerate cached container [4.92.9] Run composer i in production to regenerate cached container [4.92.8] Check for overrides: * Maps_model::addMapPoint * Maps_admin::{add|edit|add_point|edit_point} [4.92.7] Check for overrides: * Maps_admin::{index|add|edit|points|add_point|edit_point} [4.92.5] Check for overrides: * Maps_admin::{edit|edit_point} [4.92.4] Check for overrides: * Base_c::{error410|error_401|errorRender} * Front_c::errorRender * Maps_admin::{add|edit|delete|points|add_point|edit_point|deletePoint|deleteMap} * Maps_model::{getAdminRecord|getPoint} * maps/points/update [4.92.3] Run composer i in production to regenerate cached container [4.92.2] Check for overrides: * Category_admin::{add|edit} [4.92.0] rest is disabled by commenting rest_routes include (current feature flag)