Appearance
<div style="display: none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /changelog/Changelog.4.93.md for this page in Markdown format</div>
Version 4
version 4.93
- [4.93.8] fix(di): better RouterDispatcher error handling. exclude controller call_user_func_array methods which should be handled by called controller
- [4.93.7] fix(di): RouterDispatcher check for path params existence before manipulations
- [4.93.6] fix: Fix the missing first vendor in the vendors filter of category list
- [4.93.6] fix(di): RouterDispatcher should check for lang in router to unset lang from data send to controller method
- [4.93.5] chore(docs): Updated RestApiModules
- [4.93.5] refactor(domains): Replace BaseModel with Repository & Specification Pattern.
- This commit completely refactors the data access layer, deprecating the monolithic
BaseModelin favor of a more flexible, maintainable, and testable architecture based on the Repository, Specification, and Configurator design patterns. - The previous
BaseModelwas overly complex, difficult to extend with custom queries (e.g., complex joins, aggregates), and tightly coupled the business logic of queries with the data access mechanism. - This new architecture solves these problems by:
- Introducing the Repository Pattern: Each domain entity (
Page,Article, etc.) now has a dedicatedRepositoryclass responsible solely for data persistence. ABaseRepositoryprovides common functionality. - Implementing the Specification Pattern: Complex query logic is now encapsulated in small, reusable
Specificationclasses (Filter,Sort,Pagination,FilterByTag, etc.). This decouples query building from the repository and makes creating custom, complex queries simple and clean. - Using a Relation Configurator Pattern: Relationship definitions are now decoupled from the repositories themselves. Each repository is injected with a
RelationConfiguratorclass, which defines its relationships. This allows for easy extension and overriding of relations for client-specific customizations without modifying core code. - Updating DI Containers: All domain service containers have been updated to correctly wire the new repositories and their configurators, ensuring the entire system is managed by dependency injection.
- Introducing the Repository Pattern: Each domain entity (
- This refactoring was applied across all major domains, including
Cms(Subcontent, Page, Builder, Document) and its extensiveBlogmodule (Article, Author, Category, Comment, Tag), as well as theSliderandMapdomains. All existing functionality, including eager, lazy, and deep recursive relationship loading, has been preserved. - More info on usage here
- This commit completely refactors the data access layer, deprecating the monolithic
- [4.93.5] fix(Cronjob): add the change from
1ef4480to the Cronjob controller - [4.93.4] fix(security): upgrade axios to ^1.12 to fix https://security.snyk.io/vuln/SNYK-JS-AXIOS-12613773
- [4.93.4] feat(rest):
TokenProtecthelper for Bearer tokens.Input::getBearerTokenmethod - [4.93.4] fix:
DB_Query_builder::_compile_whwhere not in made NOT part of field name - [4.93.4] fix: In checkout success change the status to Paid and in the Cronjob after the check of order payment trigger the internal success hook
- [4.93.4] fix: Fix the missing first vendor in the vendors filter of category list
- [4.93.3] fix: Fix the duplicate key in registry from the initial seed
- [4.93.3] fix(domains): filter by mui
- FilterRequest optional language property
- ListRequest definitions added language value to mui filters
- BaseMod el uses language in filter subselects
- [4.93.2] feat(openapi): use symfony
Finderto scan files for openapi. Allows excluding folders / files for client overrides - [4.93.1] refactor(rest): convert
HandlesRestfulActionsfrom trait to controller - [4.93.1] feat: OpenApi docblocks.
openapi.jsongeneration withcomposer run openapi-json. View generated json atapi-docs.html - [4.93.1] fix(domains): correct mapping for filters based on list requests for
- Article\ListRequest filter authorId to author
- Page\ListRequest sorts as in response not db fields
- [4.93.1] feat: Set site-mode through advisable services panel
- [4.93.0] feat(domains):
- add direct access to tags relation from blog category
Blog\Article\ListRequestadd filter for article title, article slug, category slug and tag idsBaseModel::itemfix return type
- [4.93.0] fix(lang): add missing keys
kbitadmin.general.it,kbitadmin.general.es,kbitadmin.general.ru,kbitadmin.general.zhin adv_advisable_lang files - [4.93.0] feat: add rename, delete functionality to block builder
Notes
- [4.93.6] Check for overrides:
Product_categories::buildVendorsSideMenu
- [4.93.5] Need
composer i - [4.93.5] Check for overrides:
Cronjob::handlePendingIrisOrdersalso check for theOrderForErpHookFireTraitbeing used at the start of the class
- [4.93.4] Need
composer inpm run all-production
- [4.93.4] Check for overrides:
Checkout::irisResponseSuccessCancelIncompleteOrders::handlePendingIrisOrdersInCancelIncompleteOrdersclass add the extra traitProduct_categories::handlePendingIrisOrdersalso check for theOrderForErpHookFireTraitbeing used at the start of the class
- [4.93.1] Need
composer inpm ci && npm run admin-production
- [4.93.1] Check for overrides:
Base_c::siteModeGuardAdvisable_services::{buildAdvisableServicesJsonState|getEndpoint}custom/Restcontrollers forHandlesRestfulActionsusage
- [4.93.0] Check for overrides:
Block_builder_listing::{deleteBlock|renameBlock}