Back to Cphalcon

Changelog

CHANGELOG-5.0.md

5.12.196.4 KB
Original Source

Changelog

5.12.1 (xxxx-xx-xx)

Added

  • Added Phalcon\Db\Column::TYPE_UUID constant (value 29) and added support for PostgreSQL native uuid column type in Phalcon\Db\Adapter\Pdo\Postgresql and Phalcon\Db\Dialect\Postgresql #16840
  • Added support for Phalcon\Mvc\Url static base URI in Phalcon\Assets\Manager; when a DI container is set and a url service is available, local asset paths are now resolved via getStatic() instead of a bare / prefix #16570

Fixed

  • Fixed Phalcon\Mvc\Model\MetaDataInterface::readMetaDataIndex() and Phalcon\Mvc\Model\MetaData::readMetaDataIndex() declaring return type as array|null when the method can also return a string (e.g. for MODELS_IDENTITY_COLUMN), causing a PHP fatal error on PHP 8+ #16613
  • Fixed Phalcon\Mvc\View\Engine\Volt\Compiler::statementList() returning null instead of string when processing templates that consist entirely of block-mode statements, causing a PHP fatal error on PHP 8+ #16613
  • Fixed Phalcon\Forms\Element\Select::render() multiselect regression introduced in v5.12.0 (#16894) by reverting to Phalcon\Tag\Select::selectField(); the new Html\Helper\Input\Select only supports a single selected value and does not handle array values required for multiselect #16946
  • Fixed Phalcon\Html\Helper\Input\AbstractInput::setValue() ignoring empty string "" as a valid value, causing Checkbox and Radio inputs with value="" to never render checked="checked" even when the checked attribute matched #16648
  • Fixed Phalcon\Http\Response\Cookies::get() throwing an opaque fatal error when no DI container has been set; it now throws Phalcon\Http\Cookie\Exception with a descriptive message before accessing the container #16650
  • Fixed Phalcon\Mvc\Model\MetaData::writeMetaDataIndex() prematurely initializing a child model's metadata with the parent's source table when skipAttributes() (or skipAttributesOnCreate()/skipAttributesOnUpdate()) is called inside a parent model's initialize() and the child calls parent::initialize() before setting its own source, corrupting the child's attribute list and breaking relationship resolution #16544
  • Fixed Phalcon\Storage\Serializer\Json::serialize() rejecting plain objects (e.g. stdClass) that do not implement JsonSerializable; json_encode() handles such objects natively and the guard was unnecessary #16630
  • Fixed Phalcon\Mvc\Model\Manager retaining a model instance in lastInitialized after initialization and Phalcon\Mvc\Model not clearing the reusable-records cache after save(), causing memory to grow unboundedly in long-running processes #16566
  • Fixed Phalcon\Paginator\Adapter\QueryBuilder::paginate() returning wrong total item count when the query uses DISTINCT columns; the count now uses COUNT(DISTINCT ...) for a single column and a subquery for multiple columns #16581
  • Fixed Phalcon\Mvc\Model\Query\Builder::autoescape() incorrectly wrapping function expressions (e.g. DATE_PART(...)) in brackets when used in groupBy(), causing a "Column does not belong to any of the selected models" exception #16599
  • Fixed Phalcon\Mvc\Model - saving a model with multiple fields relations threw "Not implemented" #16029

5.12.0 (2026-04-29)

Changed

  • Changed Phalcon\Assets\Manager filter type check from is_object() to typeof and updated the error message to "The filter is not valid" #16889
  • Changed Phalcon\Cache\AbstractCache::doDeleteMultiple() to delegate to the storage adapter's deleteMultiple() instead of looping over individual delete() calls #16859
  • Changed Phalcon\Di\Exception message for missing services from "was not found in the dependency injection container" to "is not registered in the container" #16889
  • Changed Phalcon\Di\Service\Builder error messages for service parameters to use double quotes instead of single quotes #16889
  • Changed Phalcon\Forms\Element\AbstractElement::getLocalTagFactory() to throw Phalcon\Forms\Exception instead of silently creating a new TagFactory when neither setTagFactory() nor a parent Form provides one #16894
  • Changed Phalcon\Forms\Element\Select::render() to use TagFactory-based Html\Helper\Input\Select instead of the deprecated Phalcon\Tag\Select #16894
  • Changed Phalcon\Html\TagFactory to accept an optional ResponseInterface in the constructor (useful for preload) #16892
  • Changed Phalcon\Mvc\Controller and Phalcon\Mvc\View\Engine\AbstractEngine to be events aware #16890
  • Changed Phalcon\Mvc\View\Engine\Volt\Compiler::setOptions to return $this now #16891
  • Changed calls to globals_get and globals_set in the code with Phalcon\Support\Settings::get()/set() #16884
  • Changed exception messages across multiple components to use "does not" instead of "doesn't" for consistency #16889

Added

  • Added Phalcon\Encryption\Security\Uuid factory and versioned adapters (Version1Version7) with a UuidInterface carrying standard RFC 4122 namespace constants; each version is a singleton cached by the factory, invoked via v1()v7() #16326
  • Added Phalcon\Html\Helper\FriendlyTitle - available via TagFactory as friendlyTitle [#16892(https://github.com/phalcon/cphalcon/issues/16892)
  • Added Phalcon\Html\Helper\Input\Select::fromData() to populate select options from a SelectDataInterface provider, with optgroup support #16894
  • Added Phalcon\Html\Helper\Input\Select\SelectDataInterface, Phalcon\Html\Helper\Input\Select\ArrayData, and Phalcon\Html\Helper\Input\Select\ResultsetData as data providers for the Select helper #16894
  • Added Phalcon\Html\Helper\Preload - available via TagFactory as preload; TagFactory now accepts an optional ResponseInterface as its third constructor parameter [#16892(https://github.com/phalcon/cphalcon/issues/16892)
  • Added Phalcon\Mvc\Model\Resultset::refresh() to re-execute the underlying query and update the resultset with fresh data from the database #16409
  • Added deleteMultiple() to Phalcon\Storage\Adapter\* to delete multiple keys in a single operation using native batch capabilities per adapter #16859
  • Added key validation per entry in Phalcon\Cache\AbstractCache::doDeleteMultiple() throwing InvalidArgumentException for keys containing invalid characters #16859
  • Added named static factory methods Phalcon\Forms\Exception::tagFactoryNotFound() and Phalcon\Forms\Exception::usingParameterRequired() #16894

Fixed

  • Fixed Phalcon\Db\Dialect\Postgresql::modifyColumn() to generate correct SQL when changing a boolean column's default value: replaced empty check with hasDefault() to avoid treating false as "no default", removed the boolean-only branch that omitted the ALTER TABLE prefix, and fixed castDefault() to return PostgreSQL literals true/false instead of raw PHP booleans #15829
  • Fixed Phalcon\Db\Result\PdoResult::$rowCount to use null as the uninitialised sentinel instead of false, preventing a count of 0 rows being confused with "not yet counted" #16409
  • Fixed Phalcon\Dispatcher\AbstractDispatcher::dispatch() to refresh the local eventsManager and hasEventsManager variables after initialize() returns, so that an events manager attached to the dispatcher inside initialize() is honoured for all subsequent dispatch events (afterInitialize, afterExecuteRoute, afterDispatch, afterDispatchLoop, etc.) #16440
  • Fixed Phalcon\Filter\Validation::bind() to skip the dependency injection container lookup when data is empty, preventing unnecessary Di\Exception errors #16889
  • Fixed Phalcon\Filter\Validation\AbstractValidator::allowEmpty() to support a value-list array (e.g. [null, '']) in addition to the per-field map syntax, using strict === comparison so that '0' is never silently treated as empty #15491
  • Fixed Phalcon\Filter\Validation\AbstractValidator::messageFactory() to pass the joined field string to Phalcon\Messages\Message instead of the raw array when multiple fields are provided #16889
  • Fixed Phalcon\Filter\Validation\Validator\Alpha::validate() to return false when allowEmpty is explicitly set to false and the submitted value is null or an empty string #16200
  • Fixed Phalcon\Forms\Form::isValid() to apply field filters even when no validators are specified (again) #16830
  • Fixed Phalcon\Html\Escaper::css() and Phalcon\Html\Escaper::js() to return an empty string instead of false when the input is empty or contains only a null codepoint #16889
  • Fixed Phalcon\Html\Helper\AbstractHelper::renderAttributes() to emit boolean HTML5 attributes (e.g. async, defer) as standalone attribute names instead of async="1" when the attribute value is true #16304
  • Fixed Phalcon\Html\Helper\Breadcrumbs to support subdirectory installs: added getPrefix()/setPrefix() for a manual string prefix, and an optional UrlInterface constructor parameter that resolves links through url->get() (including base URI prepending and double-slash normalisation); TagFactory accepts an optional fourth UrlInterface argument and passes it to Breadcrumbs automatically #14957
  • Fixed Phalcon\Http\Response::setStatusCode() exception message from "Non-standard statuscode given without a message" to "Non-standard status-code given without a message" #16889
  • Fixed Phalcon\Image\Adapter\AbstractAdapter::crop() to correctly handle offsetX = 0 and offsetY = 0 by changing the parameter types from int to var; the previous int typing caused Zephir to compile the null check as 0 == offset in C, making explicit zero offsets indistinguishable from omitted (center) offsets #16156
  • Fixed Phalcon\Image\Adapter\Gd::processResize() to preserve PNG alpha channel transparency by replacing imagescale() with imagecreatetruecolor() + imagealphablending(false) + imagesavealpha(true) + imagecopyresampled() #16316
  • Fixed Phalcon\Image\Adapter\Imagick::processPixelate() to explicitly cast division result to int to prevent implicit float-to-int deprecation #16889
  • Fixed Phalcon\Mvc\Model::__get() to return the already-loaded related record instead of re-fetching from the database, preventing modifications to relation properties from being discarded #15554
  • Fixed Phalcon\Mvc\Model::__unserialize() and Phalcon\Mvc\Model::unserialize() to call onConstruct() after deserialization, so typed properties initialized in onConstruct are correctly set when a model is restored from cache #15906
  • Fixed Phalcon\Mvc\Model::__unserialize() and Phalcon\Mvc\Model::unserialize() to restore snapshot as the current attributes (instead of null) when a model is deserialized with no pending changes, preventing getChangedFields() from throwing after cache retrieval #15837
  • Fixed Phalcon\Mvc\Model::cloneResultMap() to call model setter methods (e.g. setName()) during ORM hydration when orm.disable_assign_setters is false, making hydration behaviour consistent with assign(); setters in localMethods (Phalcon internals) are excluded #14810
  • Fixed Phalcon\Mvc\Model::collectRelatedToSave() to skip unmodified hasOne/hasMany related records that have snapshot data, preventing spurious INSERT/UPDATE statements when a relation is read but not changed #16000
  • Fixed Phalcon\Mvc\Model::doLowInsert() to also reset uniqueKey (in addition to uniqueParams) after an auto-increment INSERT so that a subsequent has() call on the same record rebuilds the primary-key condition from current attribute values; previously, uniqueParams was cleared but uniqueKey was kept, causing has() to query with a null parameter and return false, which made SoftDelete attempt to INSERT an already-existing belongsTo related record instead of updating it #16453
  • Fixed Phalcon\Mvc\Model::doLowUpdate() to skip columns whose string value matches the column's function-call DB default (e.g. gen_random_uuid()) in the non-dynamic update path, preventing the function name from being passed as a bound string parameter and causing a DB type error #15828
  • Fixed Phalcon\Mvc\Model::doSave() to capture the model snapshot before the INSERT/UPDATE and restore it when postSaveRelatedRecords fails and rolls back the transaction; previously, with orm.update_snapshot_on_save enabled, the snapshot was permanently updated inside doLowInsert/doLowUpdate even when the transaction was rolled back, causing Dynamic Update to silently skip the write on the next save attempt #16410
  • Fixed Phalcon\Mvc\Model::getRelated() to return already-fetched relations from the internal cache (dirtyRelated first, then related) instead of always querying the database; cache is cleared after save() and delete() to prevent stale results #16409
  • Fixed Phalcon\Mvc\Model::toArray() to catch Error thrown by a getter that accesses an uninitialized typed PHP property (can occur when cloneResultMap() skips a null value for a NOT NULL column, e.g. via a LEFT JOIN), returning null instead of propagating the error #15711
  • Fixed Phalcon\Mvc\Model::unserialize() to catch TypeError when assigning a serialised null back to a typed non-nullable PHP property, preventing a crash on the second request when the model is loaded from a cache like APCu #15711
  • Fixed Phalcon\Mvc\Model\Manager::getRelationRecords() to apply reusable caching for hasManyToMany and hasOneThrough relations; reusable: true was previously ignored for through-relations #15934
  • Fixed Phalcon\Mvc\Model\Query::executeSelect() to embed Phalcon\Db\RawValue bind parameters directly in the SQL string instead of passing them to PDO #16350
  • Fixed Phalcon\Mvc\Model\Query::executeSelect() to use the write connection when the query contains a FOR UPDATE clause, instead of always using the read connection #16032
  • Fixed Phalcon\Mvc\Model\Query::getExpression() to emit NOT BETWEEN instead of BETWEEN NOT for the PHQL_T_BETWEEN_NOT token, producing valid SQL #16812
  • Fixed Phalcon\Mvc\Model\Query::getSelectColumn() to use the full model class name as the balias key in a complex resultset when the model is namespaced (e.g. App\Models\Users), instead of incorrectly applying lcfirst() to the fully-qualified name; non-namespaced models (e.g. Robots) retain the existing lcfirst() behaviour (robots) #16052
  • Fixed Phalcon\Mvc\Model\Query\Builder::getPhql() to use a named bind parameter (:APK0:) instead of embedding the raw primary-key value in the PHQL string when findFirst() is called with a numeric or numeric-string argument; this prevents unbounded growth of the internal PHQL AST cache (Query::$internalPhqlCache) in long-running CLI processes #14656
  • Fixed Phalcon\Mvc\Model\Resultset\Complex::current() to return null instead of an empty model instance when a LEFT JOIN produces no matching row (all column values are null) #16239
  • Fixed Phalcon\Mvc\Model\Transaction\Manager::collectTransaction() to keep the correct transactions when rebuilding the list after removal #16522
  • Fixed Phalcon\Mvc\Model\Transaction\Manager::commit() to remove each transaction from the pool after committing so that subsequent get() calls return a fresh transaction #16522
  • Fixed Phalcon\Mvc\Model to handle the `lastInsertId correctly under Postgres #16920 #16436 #15775
  • Fixed Phalcon\Mvc\Router\Annotations::handle() to strip the controllerSuffix from the class name when a fully-qualified class name already includes it (e.g. App\Controllers\InvoicesController), preventing the doubled suffix InvoicesControllerController #16238
  • Fixed Phalcon\Paginator\Adapter\QueryBuilder::paginate() to correctly count groups when groupBy() receives a multi-column array, using a SELECT DISTINCT subquery instead of the PostgreSQL-incompatible COUNT(DISTINCT col1, col2) form #15912
  • Fixed Phalcon\Paginator\Adapter\QueryBuilder::paginate() to use the columns option as the COUNT(DISTINCT ...) argument when a GROUP BY is present, allowing NULL-safe expressions to be supplied #15266
  • Fixed Phalcon\Storage\Adapter\Libmemcached, Phalcon\Storage\Adapter\Redis and Phalcon\Storage\Adapter\Weak to call initSerializer() during construction #16889
  • Fixed Phalcon\Storage\Adapter\Redis to initialize lifetime from options during construction #16889
  • Fixed Phalcon\Support\Helper\Json\Encode to prefix the InvalidArgumentException message with "json_encode error: " for consistency #16889
  • Fixed the CI run to correctly use updated changes, and reuse artifacts #16920
  • Fixed the CI run to now run Postgresql tests #16920
  • Fixed the CI run to now run Sqlite tests #16920

Removed

Changelog

5.11.1 (2026-04-04)

Changed

Added

  • Added Phalcon\Storage\Adapter\RedisCluster adapter to support Redis Cluster connections #16867
  • Added Phalcon\Support\Settings to be used for ini settings throughout the framework #16873

Fixed

  • Fixed Phalcon\Encryption\Security::computeHmac() to catch \ValueError thrown by PHP 8.1+ when an unknown hashing algorithm is passed #16893
  • Fixed Phalcon\Translate\Adapter\Gettext::setLocale() to call setlocale when it is available, removing warnings in PHP 8.5 #16886

Removed

5.11.0 (2026-04-03)

Changed

  • Changed Phalcon\Filter\Sanitize\IP to optimize the sanatization of IP address #16838
  • Changed Phalcon\Encryption\Security\JWT\Builder::setPassphrase() to require digits and special characters #16847
  • Changed Phalcon\Encryption\Security\JWT\Builder::getAudience() to return an empty array if not set #16846
  • Changed Phalcon\Encryption\Security\Random::base() to use 16 bits by default #16845
  • Changed Phalcon\Logger\Logger to use lowercase when reporting log levels (previously uppercase) #16852
  • Changed Phalcon\Logger\Adapter\Stream to use a more efficient way to write messages in the logger instead of opening and closing the stream per message #16852
  • Changed Phalcon\Logger\Adapter\Syslog to use the Enum instead of Logger constants #16852
  • Changed the whole testing suite to run on phpunit only #16860 #16861 #16862

Added

  • Added PIE (PHP Installer for Extensions) support #16832
  • Added the ability to specify aliases for Phalcon\Di\Di services.#13042
  • Added Phalcon\Encryption\Security\JWT\Validator::validateClaim() to validate custom claims #16843

Fixed

  • Fixed Phalcon\Forms\Form::isValid() to apply field filters even when no validators are specified #16830
  • Fixed Phalcon\Http\Request method getClientAddress() when using trustForwardedHeader #16836
  • Fixed Phalcon\Acl\Adapter\Memory::isAllowed() and Phalcon\Mvc\Model\Binder to handle PHP 8.1+ union and intersection types by checking for ReflectionNamedType before calling getName() #16261
  • Fixed memory leak in PHQL parser (phql_internal_parse_phql()) during repeated query execution. #16854
  • Fixed a deadlock issue when running the db suite #16862
  • Fixed Phalcon\Storage\Adapter\Redis::clear() and Phalcon\Storage\Adapter\Stream::clear() to only delete keys belonging to the current prefix instead of flushing the entire storage #16806

Removed

Changelog

5.10.0 (2025-12-25)

Changed

  • Changed bind() and validate() method in Phalcon\Filter\Validation and Phalcon\Filter\Validation\ValidationInterface to accept $whitelist array of only allowed fields to be mutated when using entity #16800
  • Changed Phalcon\Storage\Adapters\Libmemcached::getAdapter() to use 50ms for \Memcached::OPT_CONNECT_TIMEOUT #16818
  • Changed Phalcon\Html\Helper\Input\* to honor Docbloc directives #16778

Added

  • Added fails() method helper to Phalcon\Filter\Validation useful for standalone validation #16798

Fixed

  • Fixed Phalcon\Config\Adapter\Yaml constructor to handle null return values from yaml_parse_file(), ensuring empty configuration files are treated as empty arrays instead of throwing errors.
  • Fixed Phalcon\Http\Request method getClientAddress(true) to return correct IP address from trusted forwarded proxy. #16777
  • Fixed Phalcon\Http\Request method getPost() to correctly return json data as well and unified both getPut() and getPatch() to go through the same parsing method. #16792
  • Fixed Phalcon\Filter\Validation method bind() and validate() to correctly bind data when using entity as well as skip binding of fields not included in $whitelist #16800
  • Fixed Phalcon\Http\Request method getPostData() when Content-Type header is not set #16804
  • Fixed Phalcon\Events\ManagerInterface adding priority property #16817
  • Fixed Phalcon\Storage\Adapters\Libmemcached::getAdapter() to correctly merge adapter options #16818
  • Fixed Phalcon\Encryption\Crypt method checkCipherHashIsAvailable(string $cipher, string $type) to correctly check the cipher or hash type #16822
  • Fixed Phalcon\Mvc\Model docblocks #16825

Removed

5.9.3 (2025-04-19)

Changed

  • Added Multi-Stage Dockerfile and Github action for release Docker images to ghcr.io and Docker Hub. #16752

Added

  • Added Phalcon\Mvc\Router::setUriSource() to allow URI processing from $_GET['url'] or $_SERVER['REQUEST_URI'] as it was in v3 #16741

Fixed

  • Fixed Phalcon\Mvc\Router to correctly handle numeric URI parts as it was in v3 #16741
  • Fixed Phalcon\Mvc\Model\Binder to use ReflectionParameter::getType() instead of deprecated method, PHP 8.0 or higher issue. #16742
  • Fixed Phalcon\Mvc\Model\Query to check if cache entry exists. #16747
  • Fixed Phalcon\Mvc\Router to correctly match route when using query string URIs. #16749
  • Fixed Phalcon\Mvc\Model::cloneResultset to properly parse fields that do not accept null values #16736

Removed

5.9.2 (2025-04-03)

Changed

Added

Fixed

  • Fixed Phalcon\Translate\Adapter\Csv the escape argument is explicitly required in PHP 8.4 #16733
  • Fixed Phalcon\Mvc\Model\Query to use the cacheOptions lifetime over the "cache" service lifetime

Removed

5.9.1 (2025-03-31)

Changed

  • Changed Phalcon\Storage\Adapter\AbstractAdapter and dropped has() check before receiving the value. #16705

Added

  • Added Phalcon\Html\Helper\Breadcrumbs component to replace the old Phalcon\Html\Breadcrumbs component. #16727

Fixed

  • Fixed Phalcon\Mvc\Micro\LazyLoader::callMethod to prevent Unknown named parameter error #16724

Removed

5.9.0 (2025-03-08)

Changed

  • Changed Phalcon\Filter\Validation\Validator\Email to allow UTF8 in local part. #16637
  • Changed Phalcon\Cache\Cache::getMultiple() to use mget() when the Phalcon\Cache\Adapter\Redis is used. #16689
  • Changed Storage\Adapter\Redis to accept ssl in the options for secure connections. #16711

Added

  • Added dispatch:beforeCallAction and dispatch:afterCallAction to last-minute modifications to handler and method (mostly for debugging).

Fixed

  • Fixed Phalcon\Forms\Form and Phalcon\Filter\Validation to correctly handle the validate() response when using validation class beforeValidate() #16702
  • Fixed Phalcon\Support\Debug to use correct passed arguments in set_error_handler callback. PHP v7.2.0 deprecated errcontext and has been removed since php v8.0.0 #16649
  • Fixed Phalcon\Http\Response\Cookies, Phalcon\Http\Response\CookiesInterface and Phalcon\Http\Cookie to use correct cookie default arguments, avoid deprecated null assign warning when trying to assign the same cookie twice #16649
  • Fixed Phalcon\Encryption\Crypt to use strlen instead of mb_strlen for padding calculations #16642
  • Fixed Phalcon\Filter\Validation\Validator\File\MimeType::validate to close the handle when using finfo #16647
  • Fixed Phalcon\Mvc\Model\Manager::getRelationRecords to explicitly set the referencedModel in the conditions along with the referencedFields #16655
  • Fixed Phalcon\Image\Adapters\AbstractAdapter::watermark to correctly calculate the Y offset #16658
  • Fixed Phalcon\Dispatcher\AbstractDispatcher when calling action methods that do not define parameters to prevent Unknown named parameter error.
  • Fixed Phalcon\Di\Injectable to reference the correct instance of Phalcon\Di\Di in the docblock property #16634
  • Fixed Phalcon\Filter\Filter to have the correct docblock for IDE completion
  • Fixed Phalcon\Mvc\Model\Query to use the lifetime in the "cache" service if none has been supplied by the options #16696
  • Fixed Phalcon\Session\Adapter\Stream::gc() to throw an exception if something is wrong with glob() #16713
  • Fixed Phalcon\Http\Request::getBasicAuth() to return a null password if not defined on the server #16668

Removed

5.8.0 (2024-07-09)

Changed

Added

Fixed

  • Fixed Phalcon\Di\Injectable to reference the correct instance of Phalcon\Di\Di in the docblock property #16634

Removed

5.8.0 (2024-07-09)

Changed

  • Changed Phalcon\Mvc\Model, Phalcon\Support\Collection and Phalcon\Support\Registry to correctly implement \Serializable interface. #16591
  • Changed the Phalcon\Mvc\Router\Group::getHostname() to return null also. #16601
  • Changed Phalcon\Mvc\View\Engine\Volt\Compiler::compileSource to also return array #16608

Added

  • Added events and Phalcon\Events\Manager for Phalcon\Storage\Adapter\Apcu, Phalcon\Storage\Adapter\Redis, Phalcon\Storage\Adapter\Memory, Phalcon\Storage\Adapter\Libmemcached, Phalcon\Storage\Adapter\Stream, Phalcon\Storage\Adapter\Weak, Phalcon\Cache\Adapter\Apcu, Phalcon\Cache\Adapter\Redis, Phalcon\Cache\Adapter\Memory, Phalcon\Cache\Adapter\Libmemcached, Phalcon\Cache\Adapter\Stream, Phalcon\Cache\Adapter\Weak Phalcon\Cache\AbstractCache. #16606

Fixed

  • Fixed Phalcon\Support\Helper\PascalCase causing memory leak by anonymous function #16593
  • Fixed Phalcon\Mvc\Model\Query to rollback failed transactions and re-throw exception for data consistency #16604

Removed

5.7.0 (2024-05-17)

Changed

  • Changed Phalcon\Support\HelperFactory to use the internal mapper for better memory management #16571

Added

  • New ini setting phalcon.form.strict_entity_property_check for Phalcon\Forms\Form to enable strict entity property checking. #16567

Fixed

  • Fixed Phalcon\Mvc\Cli\Router to extend the Phalcon\Mvc\Cli\RouterInterface #16551
  • Fixed Phalcon\Filter\Validation\Validator\StringLength::validate() to correctly use the include parameter #16560
  • Fixed Phalcon\Db\Column::TYPE_BINARY and Phalcon\Db\Column::TYPE_TINYINTEGER to have unique values #16532
  • Fixed Phalcon\Forms\Form to bind only existing properties on entities, based on phalcon.form.strict_entity_property_check setting. #16567
  • Fixed Phalcon\Filter\Sanitize\BoolVal to correctly handle integers. #16582

Removed

5.6.2 (2024-03-14)

Changed

  • Changed Phalcon\Mvc\View\Engine\Volt\Compiler::filter to use the helper with upper and lower for UTF-8 characters #16543
  • Changed Phalcon\Di\AbstractInjectionAware to extend stdClass for PHP 8.2 deprecation warnings #16543

Added

Fixed

Removed

5.6.1 (2024-02-08)

Changed

  • Changed Phalcon\Cli\Router::setDefaultAction and Phalcon\Cli\Router::setDefaultModule to return the object back for a fluent interface #16328

Added

Fixed

  • Fixed Phalcon\Db\Adapter\Pdo\Postgresql::describeColumns() to return the correct string back #16371
  • Fixed Phalcon/Filter/Validation::validate() and Phalcon/Filter/Validation/ValidationInterface::validate() to return also bool #16337
  • Fixed Phalcon\Mvc\Model::toArray to ignore getters when the field name is source. #16514
  • Fixed Phalcon\Http\Request::getPut to correctly get form encoded data #16519
  • Fixed deprecation warning in callables Use of "static" in callables is deprecated for PHP 8.2+ #16263

Removed

5.6.0 (2024-01-09)

Changed

  • Changed Phalcon\Db\Adapter\Pdo\Mysql to not use specific flags for PDO (PDO::ATTR_EMULATE_PREPARES or PDO::ATTR_STRINGIFY_FETCHES) for performance reasons #16474
  • Merged Phalcon\Db\AbstractDb with Phalcon\Db\Adapter\AbstractAdapter since the former was not used #16474

Added

  • Added resetColumns(), resetFrom(), resetWhere(), resetGroupBy(), resetHaving(), resetOrderBy(), resetLimit(), resetFlags() to the Phalcon\Datamapper\Query\AbstractQuery to allow resetting query filters.

Fixed

  • Fixed Phalcon\Mvc\Model::count to ignore the order parameter (needed for Posgresql) #16471
  • Fixed Phalcon\Mvc\Model::toArray added parameter to ignore getters in order not to break serialize. #16490
  • Fixed Phalcon\Mvc\Model::toArray changing the conditionals for population to remove segfault. #16498

Removed

5.5.0 (2023-12-25)

Changed

  • Shifted minimal support from PHP 7.4 to PHP 8.0 #16477
  • Changed Phalcon\Mvc\Model::toArray to use getters if present #16320
  • Adjusted return types identical to original interface int|false in Phalcon\Session\Adapter\*::gc() #16477
  • Changed return type of Phalcon\Config\Adapter\Ini::cast() to mixed #16477

Added

  • Added support for PHP 8.3 #16477

Fixed

  • Fixed Phalcon\Filter\Validation\Validator\Numericality to return false when input has spaces #16461
  • Fixed Phalcon\Mvc\Model\ResultsetSimple::toArray to ignore numeric indexes in case results come as not fetch_assoc #16467

Removed

5.4.0 (2023-10-25)

Changed

  • Changed Phalcon\Mvc\Model::getMessages() to also filter with an array of fields #16265
  • Changed Phalcon\DataMapper\Query\Select::columns() to accept an array of columns (keys as aliases) instead of func_get_args #16451
  • Changed Phalcon\Html\Helper\AbstractSeries::__invoke() to no longer clear the internal store when called #16441

Added

  • Added the ability to define interpolator characters for the Phalcon\Logger\Formatter\Line #16430
  • Added Phalcon\Html\Helper\AbstractSeries::reset() to clear the internal store when needed #16441

Fixed

  • Model Annotation strategy did not work with empty_string #16426
  • View::reset() sets content to null instead of default empty string #16437
  • Fixed Phalcon\Filter\Validation\Validator\Size\* validators to correctly detect the size of uploaded files #16390

Removed

5.3.1 (2023-09-12)

Fixed

  • Fixed infinite save loop in Phalcon\Mvc\Model::save() #16395
  • Fixed undefined column with columnMap and model caching #16420
  • Fixed memory leak in Phalcon\Mvc\Router::handle() #16431

5.3.0 (2023-08-15)

Changed

  • Refactored Phalcon\Mvc\Model::doLowUpdate and Phalcon\Mvc\Model::postSaveRelatedRecords for better code logic and a clearer separation of behavior, although it lead to partially repeated code. #16391
  • Cleaned Phalcon\Mvc\Model\Metadata::initialize #16393

Added

  • Added Phalcon\Mvc\Model::appendMessagedFrom for code consistency and to add messages from another model #16391
  • Added Phalcon\Autoload\Loader::isRegistered for debugging purposes #16391
  • Added Phalcon\Mvc\Model\Metadata::initializeMetadata #16393
  • Added Phalcon\Mvc\Model\Metadata::getMetaDataUniqueKey #16393
  • Added Phalcon\Mvc\Model\Metadata::getColumnMapUniqueKey #16393
  • Added Phalcon\Encryption\Security\JWT\Builder::addHeader() to allow adding custom headers #16396

Fixed

  • Parse multipart/form-data from PUT request #16271
  • Set Dynamic Update by default system-wide #16343
  • Fixed memory leak in Micro application #16404

5.3.1 (xxxx-xx-xx)

Fixed

  • Forced routeId in Phalcon\Mvc\Router\Route to always return a string #16414

5.2.3 (2023-07-26)

Added

  • Added getAdapter() in Phalcon\Mvc\Model\Metadata to retrieve the internal cache adapter if necessary. #16244
  • Added Phalcon\Storage\Adapter\Weak implemented with WeakReference has a cache/retrieval solution for objects not yet collected by the Garbage Collection. #16372

Fixed

  • Tried to reproduce the behavior described in #16244 but had no success. #16244
  • Extended Phalcon\Di\Injectable from stdClass to remove the deprecation warning (dynamic properties) for PHP 8.2 #16308
  • Corrected the return type of Phalcon\Mvc\View::getVar() so that stubs can be accurate. #16276
  • Changed all the encode/decode methods for JSON to use the Phalcon\Support\Helper\Json\* classes. #15608
  • Changed the Phalcon\Support\Helper\Json\* classes to clear up json_last_error() before doing any conversions. #15608
  • Fixed Phalcon\Http\Request::getJsonRawBody to protect from empty body #16373

5.2.2 (2023-06-18)

Fixed

  • Fixed Encryption\Crypt::checkCipherHashIsAvailable to allow proper setting of the hash #16314
  • Removed unlikely from if statements from the Stream storage adapter and Json serializer #16339
  • Fixed Storage\Adapter\Stream::get()/set() to correctly calculate the path if the prefix is present in the key #16348
  • Fixed Html\Helper\Input\Checkbox to correctly process empty values #15959

5.2.1 (2023-02-28)

Fixed

5.2.0 (2023-02-26)

Added

  • Added support for PHP 8.2 #15973

Fixed

  • Fixed Phalcon\Html\Helper\Title::prepend to correctly prepend text in subsequent calls #16283

5.1.4 (2023-01-10)

Fixed

  • Fixed Phalcon\Acl\Adapter\Memory::isAllowed to not use the deprecated ReflectionType::getClass #16255

5.1.3 (2022-12-25)

Fixed

  • Fixed Phalcon\Mvc\Micro::handle to type check an object for the finish #16240
  • Fixed Phalcon\DI\Service::resolve to not call the get() from the container and cause an infinite loop #15032

5.1.2 (2022-10-30)

Fixed

5.1.1 (2022-11-12)

Fixed

  • Fixed Phalcon\Filter::sanitize to return correct data when noRecursive is true #16199
  • Fixed Phalcon\Html\Escaper::html to not return null when a zero string is passed #16202

5.1.0 (2022-11-01)

Added

  • Added Phalcon\Http\Request::getPatch() to get a value from a PATCH request #16188
  • Added Phalcon\Http\Request::getFilteredPatch() to get a value filtered from a PATCH request #16188
  • Added Phalcon\Http\Request::hasPatch() to check if a value exist in a PATCH request #16188

Fixed

  • Fixed Phalcon\Mvc\View\Engine\Volt\Compiler::isTagFactory to correctly detect a TagFactory object without throwing an error #16097
  • Fixed default values for Phalcon\Cli, Phalcon\Dispatcher and Phalcon\Application components to ensure not null values are passed to methods #16186
  • Fixed Phalcon\Form::clear to correctly clear the elements and not recurse #15956

5.0.5 (2022-10-24)

Fixed

  • Fixed Phalcon\Config\Config::setData to pass the insensitive flag to child objects #16171
  • Fixed Phalcon\Config\Adapter\Groupped::__construct to pass the insensitive flag to child objects #16171
  • Fixed Phalcon\Session\Manager::setName, removing the regex check for the name for custom adapters to work with create_sid() #16170
  • Fixed PdoResult::fetchAll when passed class name in 2nd argument #16177
  • Fixed Forms\Form::label to accept an array as a default variable #16180

5.0.4 (2022-10-17)

Fixed

  • Fixed Phalcon\Encryption\Security to take into account the workFactor in the cost calculation #16153
  • Removed double unserializing during Model caching #16035, #16131
  • Fixed Phalcon\Db\Adapter\Pdo\Mysql::describeIndexes to assign an empty string in the index type of null and remove warnings #16157
  • Fixed Phalcon\Db\Adapter\Pdo\Sqlite::describeIndexes to assign an empty string in the index type of null and remove warnings #16157
  • Fixed Phalcon\Mvc\Model\Manager::notifyEvent to return true instead of null on success #16161
  • Fixed Phalcon\Encryption\Security\JWT\Validator::validateExpiration to correctly validate the exp claim #16166

5.0.3 (2022-10-06)

Changed

  • Fixed Phalcon\Filter\Sanitize\StringVal to accept flags for htmlspecialchars() #16135

Fixed

  • Fixed Phalcon\Html\Escaper::attributes() to honor the $flags set for htmlspecialchars() #16134

5.0.2 (2022-09-27)

Fixed

  • Fixed Phalcon\Html\Escaper::attributes() to accept any value and transform it to string #16123
  • Fixed Phalcon\Logger\AbstractLogger::getLevelNumber() to better check for string levels #16123

5.0.1 (2022-09-23)

Added

  • Added Phalcon\Encryption\Security\JWT\Validator::get() and Phalcon\Encryption\Security\JWT\Validator::set() for validation data #16115

Fixed

  • Fixed Phalcon\Encryption\Security\JWT\Token\Token::validate() to correctly call validator methods #16115

5.0.0 (2022-09-22)

Changed

  • Changed Phalcon\Logger\Adapter\Stream::process to open the log file, check for locks, write contents and close the stream #16072
  • Changed getters and setters from shorthand format to full methods #16102
  • Changed return types to array in Phalcon\Annotations\Reflection class methods #16106
  • Changed Phalcon\Html\Escaper::attributes() to also accept an array of attributes #16108

Added

  • Added Phalcon\Encryption\Security\JWT\Token::validate() to validate a token's claims #16094
  • Added Phalcon\Encryption\Security\JWT\Token::verify() to verify a token's signature #16094
  • Added Phalcon\Encryption\Security\JWT\Validator::getErrors() to return any errors with the validation as an array #16094

Fixed

  • Fixed and improved return type of object & ?object #16023
  • Fixed Phalcon\Filter\Validation\Validator\Digit to use only strings for ctype_* calls #16064
  • Fixed Phalcon\Flash\AbstractFlash::outputMessage to return the message (implicitFlush) #16063
  • Fixed Phalcon\Filter\Validation\Validator\Numericality to correctly detect illegal characters within string numbers #16070
  • Fixed segmentation fault on Reflection of Phalcon\Mvc\Model class #16080
  • Fixed segmentation fault on Reflection #16096

5.0.0rc4 (2022-08-08)

Fixed

  • Reverted to single quotes when volt code generates PHP code.
  • Any tag helpers only accept parameters with double quotes
  • Renamed Phalcon\Tag::form() to Phalcon\Tag::formLegacy (helper form_legacy) #16019
  • Fixed
    • Phalcon\Cli\Router::getMatchedRoute()
    • Phalcon\Cli\RouterInterface::getMatchedRoute()
    • Phalcon\Mvc\Router::getMatchedRoute()
    • Phalcon\Mvc\RouterInterface::getMatchedRoute() to return RouterInterface or null #16030
  • Fixed
    • Phalcon/Storage/Serializer/Base64::unserialize()
    • Phalcon/Storage/Serializer/Igbinary::unserialize()
    • Phalcon/Storage/Serializer/Igbinary::serialize()
    • Phalcon/Storage/Serializer/Php::unserialize() to reset isSuccess value #16040
  • Fixed Phalcon\Paginator\Adapter\Model::paginate() fix group parameter breaking total items #16042
  • Fixed Phalcon\Mvc\Model::doLowUpdate() prevent RawValue getting overwritten #16037
  • Refactored Phalcon\Image\*
    • Reorganized code in the image adapters
    • Simplified various areas, speeding up processing
    • Removed getInternalImImage() (same as getImage()) for Phalcon\Image\Adapter\Imagick
    • Added better support for webm images #15977

5.0.0rc3 (2022-07-12)

Added

  • Added support for webp images for Phalcon\Image\Adapter\Gd #15977
  • Added Phalcon\Mvc\Model\ManagerInterface::getBuilder() to return the existing builder (created by createBuilder()) #15966
  • Added Phalcon\Mvc\Model\Manager::getBuilder() to return the existing builder (created by createBuilder()) #15966

Fixed

  • Fixed Phalcon\Tag::textArea() to check if the value is null before calling htmlspecialchars #15992
  • Fixed
    • Phalcon/Filter/Validation/Validator/Alnum
    • Phalcon/Filter/Validation/Validator/Alpha
    • Phalcon/Filter/Validation/Validator/Confirmation
    • Phalcon/Filter/Validation/Validator/CreditCard
    • Phalcon/Filter/Validation/Validator/StringLength/Max
    • Phalcon/Filter/Validation/Validator/StringLength/Min to check if the value is null before calling internal PHP methods #15992
  • Fixed Phalcon\Html\Helper\Title to properly use indent and delimiter #15984
  • Fixed Phalcon\Html\Helper\Doctype to properly use indent and delimiter #15984
  • Fixed Phalcon\Mvc\View\Engine\Volt::isIncluded() and Phalcon\Mvc\View\Engine\Volt::length() to check for null values before calls to php methods #15984
  • Fixed Phalcon\Mvc\View\Engine\Volt\Compiler::expression() to use double quotes instead of single ones #15984
  • Fixed Phalcon\Support\Version::getPart() to always return string values #15984
  • Fixed Phalcon\Dispatcher\DispatcherInterface::setModuleName() to accept null #15997
  • Fixed Phalcon\Dispatcher\AbstractDispatcher::setModuleName() to accept null #15997
  • Fixed Phalcon\Dispatcher\AbstractDispatcher::getModuleName() to also return null #15997

5.0.0rc2 (2022-06-09)

Changed

  • Changed the StringVal filter to now use htmlspecialchars() #15978

Added

  • Added StringValLegacy filter using filter_var() for PHP < 8.1 #15978

Fixed

  • Fixed Phalcon\Http\Response::getQualityHeader() to check if the server variable is null before performing preg_split #15984

5.0.0rc1 (2022-05-31)

Changed

  • Changed Phalcon\Session\Bag::__construct() to accept a Phalcon\Session\Manager as the first parameter and name as the second one #15904
  • Changed Phalcon\Logger\Logger to no longer depend on PSR interfaces #15925
  • Changed Phalcon\Cache\Cache to no longer depend on PSR interfaces #15927
  • Changed Phalcon\Html\Link to no longer depend on PSR interfaces #15930

Added

  • Added Phalcon\Encryption\Crypt::isValidDecryptLength($input) to allow checking for the length of the decryption string #15879
  • Added Phalcon\Di\InitializationAwareInterface to allow auto calling the initialize method when accessing service through DIC #15916
  • Added
    • Phalcon\Storage\Serializer\MemcachedIgbinary
    • Phalcon\Storage\Serializer\MemcachedJson
    • Phalcon\Storage\Serializer\MemcachedPhp
    • Phalcon\Storage\Serializer\RedisIgbinary
    • Phalcon\Storage\Serializer\RedisJson
    • Phalcon\Storage\Serializer\RedisMsgpack
    • Phalcon\Storage\Serializer\RedisNone
    • Phalcon\Storage\Serializer\RedisPhp to be used if adapter serialization is required #15904
  • Added
    • Phalcon\Logger\LoggerInterface
    • Phalcon\Logger\AbstractLogger to be used in the logger class but also the proxy-psr3 repo #15925
  • Added
    • Phalcon\Cache\CacheInterface
    • Phalcon\Cache\AbstractCache to be used in the cache class but also the proxy-psr16 repo #15927
  • Added
    • EvolvableLinkInterface.zep
    • Phalcon\Html\Link\Interfaces\EvolvableLinkProviderInterface
    • Phalcon\Html\Link\Interfaces\LinkInterface
    • Phalcon\Html\Link\Interfaces\LinkProviderInterface
    • Phalcon\Html\Link\AbstractLink
    • Phalcon\Html\Link\AbstractLinkProvider to be used in the link class but also the proxy-psr13 repo #15930
  • Added Phalcon\Translate\Adapter\Csv::toArray() and Phalcon\Translate\Adapter\NativeArray::toArray() to return the translation array back #15902

Fixed

  • Fixed Phalcon\Html\Helper\Input\Numeric to produce correct elements #15896
  • Fixed Phalcon\Storage\Adapter\* to correctly store null values #15904

Removed

  • Removed Phalcon\Container\Container and moved its contents to the proxy-psr11 repo #15928
  • Removed Phalcon\Http\Message\* and Phalcon\Http\Server\* classes. This removes PSR from Phalcon. PSR-7 available in v6 #15929

5.0.0beta3 (2022-02-06)

Changed

  • Renamed Phalcon\Db\Result\Pdo to Phalcon\Db\Result\PdoResult to avoid collisions with \PDO #15874
  • Moved Phalcon\Validation to Phalcon\Filter\Validation

Added

  • Added Phalcon\Html\Helper\Title:setSeparator to allow setting the separator independently #15866

Fixed

  • Fixed Phalcon\Logger\AbstractAdapter::getFormattedItem() to not add PHP_EOL at the end of the message and added it to the Phalcon\Logger\Adapter\Stream #14547
  • Fixed Phalcon\Html\Helper\Title:__invoke() to not use the $separator as parameter - no need to redefine it in a view #15866
  • Fixed the delimiters for Phalcon\Support\Helper\SnakeCase and Phalcon\Support\Helper\KamelCase #15850
  • Fixed Phalcon\Mvc\Router\Route::getName() and Phalcon\Mvc\Router\Route::getHostname() to also return null #15880
  • Fixed Phalcon\Mvc\Router\RouteInterface::getName() and Phalcon\Mvc\Router\RouteInterface::getHostname() to also return null #15880
  • Fixed Phalcon\Mvc\Model::findFirst() to return mixed or null #15883
  • Fixed Phalcon\Mvc\Model::belongsTo() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model::hasMany() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model::hasOne() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model::hasOneThrough() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model\Manager::addHasMany() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model\Manager::addHasManyToMany() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model\Manager::addHasOne() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model\Manager::addHasOneThrough() parameter options array by default #15971
  • Fixed Phalcon\Mvc\Model\Manager::addBelongsTo() parameter options array by default #15971

5.0.0beta2 (2022-01-06)

Added

  • Added Phalcon\Support\Helper\Str\KebabCase, Phalcon\Support\Helper\Str\PascalCase and Phalcon\Support\Helper\Str\SnakeCase helpers #15850

Fixed

  • Phalcon\Mvc\View\Engine\Volt\Compiler::functionCall() to check for container presence before checking the tag service #15842
  • Phalcon\Di\FactoryDefault() to set assets and tag as shared services #15847
  • Phalcon\Forms\Element\AbstractElement::getLocalTagFactory() to return the tagFactory from itself, the form, the DI or a new instance #15847
  • Changed references to sha1 with hash("sha256", $data) to ensure that there are no collisions from the hashing algorithm #15844
  • Changed Phalcon\Support\Helper\Str\Camelize to accept a third boolean parameter indicating whether the result will have the first letter capitalized or not #15850

5.0.0beta1 (2021-12-24)

Changed

  • Marked as deprecated:
    • Phalcon\Mvc\Model::existsBelongsTo()
    • Phalcon\Mvc\Model::existsHasMany()
    • Phalcon\Mvc\Model::existsHasOne()
    • Phalcon\Mvc\Model::existsHasOneThrough()
    • Phalcon\Mvc\Model::existsHasManyToMany()
    • Phalcon\Translate\Adapter\Csv::exists()
    • Phalcon\Translate\Adapter\Gettext::exists()
    • Phalcon\Translate\Adapter\NativeArray::exists() #15785
  • Moved Phalcon\Container to Phalcon\Container\Container #15796
  • Changed the Phalcon\Support\Collection::get() to return the default value if the key does not exist or the value is null to mirror the behavior of v3. #15370
  • Moved Phalcon\Registry to Phalcon\Support\Registry #15802
  • Moved Phalcon\Url to Phalcon\Mvc\Url #15798
  • Moved Phalcon\Loader to Phalcon\Autoload\Loader #15797
  • Changes to Phalcon\Autoload\Loader:
    • Renamed registerClasses() to setClasses()
    • Renamed registerDirectories() to setDirectories()
    • Renamed registerExtensions() to setExtensions()
    • Renamed registerFiles() to setFiles()
    • Renamed registerNamespaces() to setNamespaces() #15797
  • Moved Phalcon\Di to Phalcon\Di\Di #15799
  • Removed references to Phalcon\Tag from the framework in favor of Phalcon\Html\TagFactory #15801
  • Phalcon\Forms\Form requires a Phalcon\Html\TagFactory to be set before it can render elements #15801
  • Phalcon\Di\FactoryDefault will now return a Phalcon\Html\TagFactory for the tag service #15801

Added

  • Added:
    • Phalcon\Mvc\Model::hasBelongsTo()
    • Phalcon\Mvc\Model::hasHasMany()
    • Phalcon\Mvc\Model::hasHasOne()
    • Phalcon\Mvc\Model::hasHasOneThrough()
    • Phalcon\Mvc\Model::hasHasManyToMany()
    • Phalcon\Translate\Adapter\Csv::has()
    • Phalcon\Translate\Adapter\Gettext::has()
    • Phalcon\Translate\Adapter\NativeArray::has() #15785
  • Added filter, camelize, dynamic and uncamelize in Phalcon\Support\HelperFactory #15805
  • Added Phalcon\Autoload\Loader::getDebug() to collect debugging information from the loader (enabled from the constructor) #15797

Fixed

  • Phalcon\Logger\LoggerFactory::load() to correctly use the key of the adapters array as the name of the adapter #15831
  • Fixed Phalcon\Dispatcher\Dispatcher::setParams() not updating local params during dispatch() loop #15603
  • Fixed related records auto-save with belongsTo() relation #15148

Removed

  • Removed Phalcon\Exception; replaced by \Exception #15800

5.0.0alpha7 (2021-11-16)

Changed

  • Changes to the Phalcon\Acl:
    • Renamed Phalcon\Acl\ComponentAware to Phalcon\Acl\ComponentAwareInterface
    • Renamed Phalcon\Acl\RoleAware to Phalcon\Acl\RoleAwareInterface #15691
  • Changed require to require_once in Phalcon\Loader to avoid conflicts with other loaders #15489
  • Changed require to require_once in Phalcon\Cli\Console and Phalcon\Mvc\Application for a bit of extra performance #15489
  • Phalcon\Collection has been moved under the Support namespace:
    • Renamed Phalcon\Collection to Phalcon\Support\Collection
    • Renamed Phalcon\Collection\Exception to Phalcon\Support\Collection\Exception
    • Renamed Phalcon\Collection\ReadOnly to Phalcon\Support\Collection\ReadOnly
    • Renamed Phalcon\Collection to Phalcon\Support\Collection #15700
  • Changes to Phalcon\Session\Bag:
    • Changed Phalcon\Session\Bag::construct to accept a container instead of internally calling the default
    • Changed Phalcon\Session\Bag::construct to throw an exception if the container is not specified
    • Changed Phalcon\Session\Bag::init to store the data in the session #15494
  • Changed Phalcon\Events\Event::construct() to allow source to be nullable #15133
  • Changes to Phalcon\Crypt
    • Moved Phalcon\Crypt\Exception to Phalcon\Crypt\Exception\Exception
    • Moved Phalcon\Crypt\Mismatch to Phalcon\Crypt\Exception\Mismatch
    • Changed the ccm/gcm modes to store the authTag with the encryption string and process it with the decryption string #15717
  • Created new namespace Phalcon\Encryption
    • Moved Phalcon\Crypt to Phalcon\Encryption\Crypt
    • Moved Phalcon\Security to Phalcon\Encryption\Security
    • Moved the whole Security namespace under Encryption
      • Security\JWT\Exceptions\UnsupportedAlgorithmException to Encryption\Security\JWT\Exceptions\UnsupportedAlgorithmException
      • Security\JWT\Exceptions\ValidatorException to Encryption\Security\JWT\Exceptions\ValidatorException
      • Security\JWT\Signer\AbstractSigner to Encryption\Security\JWT\Signer\AbstractSigner
      • Security\JWT\Signer\Hmac to Encryption\Security\JWT\Signer\Hmac
      • Security\JWT\Signer\None to Encryption\Security\JWT\Signer\None
      • Security\JWT\Signer\SignerInterface to Encryption\Security\JWT\Signer\SignerInterface
      • Security\JWT\Token\AbstractItem to Encryption\Security\JWT\Token\AbstractItem
      • Security\JWT\Token\Enum to Encryption\Security\JWT\Token\Enum
      • Security\JWT\Token\Item to Encryption\Security\JWT\Token\Item
      • Security\JWT\Token\Parser to Encryption\Security\JWT\Token\Parser
      • Security\JWT\Token\Signature to Encryption\Security\JWT\Token\Signature
      • Security\JWT\Token\Token to Encryption\Security\JWT\Token\Token
      • Security\JWT\Builder to Encryption\Security\JWT\Builder
      • Security\JWT\Validator to Encryption\Security\JWT\Validator
      • Security\JWT\Validator to Encryption\Security\JWT\Validator
      • Security\Exception to Encryption\Security\Exception
      • Security\Random to Encryption\Security\Random #15729
  • Renamed
    • Phalcon\Crypt\Crypt::getHashAlgo() to Phalcon\Crypt\Crypt::getHashAlgorithm()
    • Phalcon\Crypt\Crypt::getAvailableHashAlgos() to Phalcon\Crypt\Crypt::getAvailableHashAlgorithms()
    • Phalcon\Crypt\Crypt::setHashAlgo() to Phalcon\Crypt\Crypt::setHashAlgorithm() #15717
  • Renamed Phalcon\Factory\AdapterFactory::getAdapters() to Phalcon\Factory\AdapterFactory::getServices() #15717
  • Changed Phalcon\Crypt\Crypt::__construct() to have useSigning set to true by default #15717
  • Changes to Phalcon\Config
    • Moved Phalcon\Config to Phalcon\Config\Config
    • Changed Phalcon\Config\Config::path by making the delimiter parameter a string
    • Changed Phalcon\Config\Adapter\Ini::__construct to not accept null as the mode. The default is now INI_SCANNER_NORMAL (2)
    • Refactored the code for more efficiency and speed #15720
  • Changed Phalcon\Db\Adapter\AdapterInterface::getInternalHandler() and Phalcon\Db\Adapter\Pdo\AbstractPdo::getInternalHandler() to return var instead of \PDO for custom adapters with different engines #15119
  • Moved Phalcon\Filter to Phalcon\Filter\Filter; added more tests #15726
  • Changed Phalcon\Mvc\Model::getPreparedQuery() to return QueryInterface instead of Query #15562
  • Moved Phalcon\Cache to Phalcon\Cache\Cache #15728
  • Changed Phalcon\Factory\AdapterFactory to define the factory exception in getExceptionClass() instead of a property. #15728
  • Renamed Phalcon\Db\Adapter\AbstractAdapter::getSqlVariables() to Phalcon\Db\Adapter\AbstractAdapter::getSQLVariables() to align with the rest of the getSQL* methods #15637
  • Moved Phalcon\Logger to Phalcon\Logger\Logger #15727
  • Changes to Phalcon\Escaper
    • Moved Phalcon\Escaper to Phalcon\Html\Escaper
    • Moved Phalcon\Escaper\EscaperInterface to Phalcon\Html\Escaper\EscaperInterface
    • Moved Phalcon\Escaper\Exception to Phalcon\Html\Escaper\Exception
    • Deprecated methods (to be removed at a future version)
      • escapeCss() becomes css()
      • escapeJs(), becomes js()
      • escapeHtml() becomes html()
      • escapeHtmlAttr() becomes attributes()
      • escapeUrl() becomes url()
      • setHtmlQuoteType() becomes setFlags() #15757
  • Changed Phalcon\Encryption\Security::hash() to also use password_hash() and accept ARGON2* algorithms #15731
  • Removed uncamelize of realClassName in Phalcon\Mvc\Router\Route::getRoutePaths() if definition is string to make processing same as if array definition #15067
  • Changed Phalcon\Validation::getValue() behavior to get value from data if not found in entity. #14203
  • Changed Phalcon\Forms\Form::isValid() signature: added whitelist argument. #14203
  • Changed Phalcon\Support\Collection\ReadOnly to Phalcon\Support\Collection\ReadOnlyCollection to avoid conflicts with the read-only feature in PHP 8.1 #15767
  • Removed Phalcon\Text - replaced by Phalcon\Support\Helper\Str\* #15776
  • Removed Phalcon\Helper\Arr - replaced by Phalcon\Support\Helper\Arr\* #15776
  • Removed Phalcon\Helper\File - replaced by Phalcon\Support\Helper\File\* #15776
  • Removed Phalcon\Helper\Json - replaced by Phalcon\Support\Helper\Json\* #15776
  • Removed Phalcon\Helper\Number - replaced by Phalcon\Support\Helper\Number\* #15776
  • Removed Phalcon\Helper\Str - replaced by Phalcon\Support\Helper\Str\* #15776
  • Removed references to Phalcon\Text, Phacon\Helper\* from the code replacing it with Phalcon\Support\Helper\* #15776
  • Synchronized tests with phalcon/phalcon thus increasing coverage #15776
  • Changed Phalcon\Assets\Manager to require a Phalcon\Html\TagFactory in its constructor #15776

Added

  • Added more tests in the suite for additional code coverage #15691
  • Added Phalcon\Events\AbstractEventsAware class to handle the Events Manager when necessary #15691
  • Added Phalcon\Acl\Adapter\AdapterInterface::getInheritedRoles() and Phalcon\Acl\Adapter\Memory::getInheritedRoles() that returns the inherited roles based on a passed role name (or all if no parameter supplied) #15154
  • Changes to Phalcon\Crypt
    • Added Phalcon\Crypt\Padding\PadInteface and padding adapters
      • Phalcon\Crypt\Padding\Ansi
      • Phalcon\Crypt\Padding\Iso10126
      • Phalcon\Crypt\Padding\IsoIek
      • Phalcon\Crypt\Padding\Noop
      • Phalcon\Crypt\Padding\PadInterface
      • Phalcon\Crypt\Padding\Pkcs7
      • Phalcon\Crypt\Padding\Space
      • Phalcon\Crypt\Padding\Zero
    • Added Phalcon\Crypt\PadFactory to easily create padding adapters
    • Added more tests increasing coverage #15717
  • Added Phalcon\Cache\Adapter\*::setForever() and Phalcon\Storage\Adapter\*::setForever() to allow storing a key forever #15485
  • Added Phalcon\Encryption\Security::getHashInformation() to return information for a hash #15731
  • Added constants Phalcon\Encryption\Security::CRYPT_ARGON2I and Phalcon\Encryption\Security::CRYPT_ARGON2ID #15731
  • Added allowEmpty checks to common validators #15515
  • Added Phalcon\Forms\Form::getFilteredValue() to get filtered value without providing entity #15438
  • Added Phalcon\Forms\Form::setWhitelist() and Phalcon\Forms\Form::getWhitelist() #14203
  • Added dirtyState serialization in Phalcon\Mvc\Model #15571
  • Added short versions of helpers for Phalcon\Html\TagFactory (call service as a method) #15776
  • Added short versions of helpers for Phalcon\Support\HelperFactory (call service as a method) #15776
  • Added Phalcon\Html\Helper\Doctype helper for doctype generation #15776
  • Added style or link tag option for Phalcon\Html\Helper\Style #15776

Fixed

  • Fixed Query::getExpression() return type #15553
  • Fixed Phalcon\Mvc\Model::getRelated() to correctly return relationships (cached or not) when the foreign key has changed #15649
  • Fixed Phalcon\Db\Adapter\Pdo\*, Phalcon\Mvc\Model and Phalcon\Mvc\Model\MetaData\Strategy\Annotations to treat BIGINT numbers as string #15632
  • Fixed Phalcon\Crypt\Crypt::decrypt() to correctly calculate the hash when using signed mode #15717
  • Fixed Phalcon\Mvc\Model\Manager::isVisibleModelProperty() to correctly check if setting property is visible #15276
  • Fixed Phalcon\Config\Config::merge to retain numeric indexes in deep merges #14705
  • Fixed globals (Zephir change) to correctly display string values for global settings in phpinfo() #15269
  • Fixed Phalcon\Storage\Adapter\Redis::getAdapter() and Phalcon\Cache\Adapter\Redis::getAdapter() to accept the connection timeout in the constructor options #15744
  • Fixed Phalcon\Db\Adapter\AbstractAdapter::getSQLVariables() to return an empty array when initialized #15637
  • Fixed Phalcon\Cache\Adapter\* and Phalcon\Storage\Adapter\* to delete a key when set() is called with a zero or negative TTL #15485
  • Fixed Phalcon\Db\Adapter\Pdo\Mysql to not use PDO::ATTR_EMULATE_PREPARES and PDO::ATTR_STRINGIFY_FETCHES by default. This allows numbers to be returned with resultsets instead of strings for numeric fields #15361
  • Fixed Phalcon\Validation\Validator\File to use messageFileEmpty #14928
  • Fixed Phalcon\Db\RawValue usage bugs in Phalcon\Mvc\Model::doLowUpdate() #15413
  • Fixed type attribute for stylesheet links #15776
  • Fixed Phalcon\Debug to not throw an exception if a URL service is not present #15381

Removed

  • Removed Phalcon\Kernel - obsolete #15776

5.0.0alpha6 (2021-09-16)

Changed

  • Adjusted the constructor for Phalcon\Storage\Adapter\* and Phalcon\Cache\Adapter\* to allow an empty key prefix to be set if needed. #15480
  • Changed:
    • Phalcon\Db\Adapter\AdapterInterface:lastInsertId() to be identical as Pdo:lastInsertId()
    • Phalcon\Db\Adapter\AdapterInterface:close() now returns void instead of bool
    • Phalcon\Db\Adapter\AdapterInterface:connect() now returns void instead of bool and 1st argument default value is empty array instead of null #15659

Added

  • Added Phalcon\Security\JWT\Builder::addClaim for custom JWT claims. #15656
  • Added Phalcon\Support\Helper namespace:
    • Added Phalcon\Support\HelperFactory, a handy factory to help with string, array and other manipulations
    • Added helper service in Phalon\Di\FactoryDefault and Phalcon\Di\FactoryDefault\Cli to point to the Phalcon\Support\HelperFactory
    • Added array manipulation classes:
      • Phalcon\Support\Helper\Arr\Blacklist
      • Phalcon\Support\Helper\Arr\Chunk
      • Phalcon\Support\Helper\Arr\First
      • Phalcon\Support\Helper\Arr\FirstKey
      • Phalcon\Support\Helper\Arr\Flatten
      • Phalcon\Support\Helper\Arr\Get
      • Phalcon\Support\Helper\Arr\Group
      • Phalcon\Support\Helper\Arr\Has
      • Phalcon\Support\Helper\Arr\IsUnique
      • Phalcon\Support\Helper\Arr\Last
      • Phalcon\Support\Helper\Arr\LastKey
      • Phalcon\Support\Helper\Arr\Order
      • Phalcon\Support\Helper\Arr\Pluck
      • Phalcon\Support\Helper\Arr\Set
      • Phalcon\Support\Helper\Arr\SliceLeft
      • Phalcon\Support\Helper\Arr\SliceRight
      • Phalcon\Support\Helper\Arr\Split
      • Phalcon\Support\Helper\Arr\ToObject
      • Phalcon\Support\Helper\Arr\ValidateAll
      • Phalcon\Support\Helper\Arr\ValidateAny
      • Phalcon\Support\Helper\Arr\Whitelist
    • Added file manipulation classes:
      • Phalcon\Support\Helper\File\Basename
    • Added JSON manipulation classes:
      • Phalcon\Support\Helper\Json\Encode
      • Phalcon\Support\Helper\Json\Decode
    • Added number manipulation classes:
      • Phalcon\Support\Helper\Number\IsBetween
    • Added array manipulation classes:
      • Phalcon\Support\Helper\Str\Camelize
      • Phalcon\Support\Helper\Str\Concat
      • Phalcon\Support\Helper\Str\CountVowels
      • Phalcon\Support\Helper\Str\Decapitalize
      • Phalcon\Support\Helper\Str\Decrement
      • Phalcon\Support\Helper\Str\DirFromFile
      • Phalcon\Support\Helper\Str\DirSeparator
      • Phalcon\Support\Helper\Str\Dynamic
      • Phalcon\Support\Helper\Str\EndsWith
      • Phalcon\Support\Helper\Str\FirstBetween
      • Phalcon\Support\Helper\Str\Friendly
      • Phalcon\Support\Helper\Str\Humanize
      • Phalcon\Support\Helper\Str\Includes
      • Phalcon\Support\Helper\Str\Increment
      • Phalcon\Support\Helper\Str\Interpolate
      • Phalcon\Support\Helper\Str\IsAnagram
      • Phalcon\Support\Helper\Str\IsLower
      • Phalcon\Support\Helper\Str\IsPalindrome
      • Phalcon\Support\Helper\Str\IsUpper
      • Phalcon\Support\Helper\Str\Len
      • Phalcon\Support\Helper\Str\Lower
      • Phalcon\Support\Helper\Str\Prefix
      • Phalcon\Support\Helper\Str\Random
      • Phalcon\Support\Helper\Str\ReduceSlashes
      • Phalcon\Support\Helper\Str\StartsWith
      • Phalcon\Support\Helper\Str\Suffix
      • Phalcon\Support\Helper\Str\Ucwords
      • Phalcon\Support\Helper\Str\Uncamelize
      • Phalcon\Support\Helper\Str\Underscore
      • Phalcon\Support\Helper\Str\Upper#15738

5.0.0alpha5 (2021-09-09)

Changed

  • Merged all architectures (build/phalcon/32bits, build/phalcon/64bits and build/phalcon/safe) into single universal inside build/phalcon #15647

Fixed

  • Fixed C code in build/ directory #15647

5.0.0alpha4 (2021-09-05)

Changed

  • Changed composer.json to use PSR 1.1.x #15504
  • Changed Phalcon\Di\Injectable:getDI() to set default DI when no DI is set #15629

Added

  • Added Phalcon\Flash\Direct::setCssIconClasses and Phalcon\Flash\Session::setCssIconClasses to allow setting icons in the flash messages (bootstrap related) #15292
  • Added Phalcon\Http\Message\RequestMethodInterface and Phalcon\Http\Message\ResponseStatusCodeInterface that contain constants to be used for any HTTP implementations (see PHP-FIG) #15615

Fixed

  • Fixed Phalcon\Container interface to abide with Psr\Container\ContainerInterface after the upgrade to PSR 1.1.x #15504
  • Fixed Phalcon\Forms\Form when no entity is passed with isValid(), it uses the entity set in the form #15567
  • Fixed Phalcon\Logger\Adapter\* to not allow serialization of the object. Added an exception when destroying the object while in transaction mode #15638

5.0.0alpha3 (2021-06-30)

Changed

  • Changed version format to allow alpha/beta/RC releases on PECL.
  • Changed:
    • Phalcon\Mvc\Model\Resultset\Complex::__construct now accepts Psr\SimpleCache\CacheInterface for the cache
    • Phalcon\Mvc\Model\Resultset\Simple::__construct now accepts Psr\SimpleCache\CacheInterface for the cache
    • Phalcon\Mvc\Model\Resultset::__construct now accepts Psr\SimpleCache\CacheInterface for the cache
    • Phalcon\Mvc\Model\Resultset::getCache now returns Psr\SimpleCache\CacheInterface #15471
  • Changed Phalcon\Db\Adapter\AbstractAdapter:delete() signature of optional parameters. #15363
  • Changed bindCounts argument to array type in:
    • Phalcon\Db\Dialect:getColumnList()
    • Phalcon\Db\Dialect:getSqlColumn()
    • Phalcon\Db\Dialect:getSqlExpression()
    • Phalcon\Db\Dialect:getSqlExpressionBinaryOperations()
    • Phalcon\Db\Dialect:getSqlExpressionCase()
    • Phalcon\Db\Dialect:getSqlExpressionCastValue()
    • Phalcon\Db\Dialect:getSqlExpressionConvertValue()
    • Phalcon\Db\Dialect:getSqlExpressionFunctionCall()
    • Phalcon\Db\Dialect:getSqlExpressionGroupBy()
    • Phalcon\Db\Dialect:getSqlExpressionHaving()
    • Phalcon\Db\Dialect:getSqlExpressionJoins()
    • Phalcon\Db\Dialect:getSqlExpressionLimit()
    • Phalcon\Db\Dialect:getSqlExpressionList()
    • Phalcon\Db\Dialect:getSqlExpressionObject()
    • Phalcon\Db\Dialect:getSqlExpressionOrderBy()
    • Phalcon\Db\Dialect:getSqlExpressionScalar()
    • Phalcon\Db\Dialect:getSqlExpressionUnaryOperations()
    • Phalcon\Db\Dialect:getSqlExpressionWhere()
    • Phalcon\Db\DialectInterface:getSqlExpression()

Fixed

  • Fixed Phalcon\Db\Adapter\AbstractAdapter:delete() when bindTypes argument is passed. #15363
  • Fixed Phalcon\Storage\Adapter\Redis::getAdapter to use passed connectionTimeout, retryInterval and readTimeout options for the connection #15484
  • Fixed Phalcon\Mvc\View\Engine\Volt\Compiler for a use case when a block will return null vs an array for statementList in PHP 8 #15556

5.0.0-alpha.2 (2021-05-05)

Changed

  • Changed Phalcon\Translate\Adapter\Gettext::setLocale signature to allow the category and an array of locales #14764
  • Phalcon\Version is now moved to Phalcon\Support\Version
    • _getSpecialVersion and _getVersion have been removed (marked deprecated in v4)
    • The class is no longer static; it has to be instantiated first
    • References to Phalcon\Debug and the Volt compiler have been adjusted #15422
  • Phalcon\Debug is now moved to Phalcon\Support\Debug; CSS/JS references updated #14817
  • Changed the logging names types to uppercase #15375
  • Changes to the Phalcon\Logger:
    • Renamed Phalcon\Logger\Item::getName to Phalcon\Logger\Item::getLevelName
    • Renamed Phalcon\Logger\Item::getType to Phalcon\Logger\Item::getLevel
    • Changed the logger timestamp to be DateTimeImmutable on a per item basis - more accurate timing
    • Changed Phalcon\Logger to accept a DateTimeZone in the constructor
    • Changed placeholder %type% to %level% to align with the variables #15411
  • Changed Phalcon\Mvc\Model::getSchema(), Phalcon\Mvc\ModelInterface::getSchema(), Phalcon\Mvc\Model\Manager::getModelSchema() Phalcon\Mvc\Model\ManagerInterface::getModelSchema() to return string | null so as to abide with the latest Zephir #15411
  • Changed the interpolation for the formatters to use the Phalcon\Support\Helper\Str\Interpolate #15411
  • Changed the exceptions thrown from factories to be more specific to their namespaces vs. the Factory generic one #15411
  • Changed Phalcon\Mvc\Model\ManagerInterface:getRelationByAlias() return type from Relation|bool to RelationInterface|bool #15343
  • Changed Phalcon\Paginator\Repository:getItems() return type from array to ResultsetInterface #15074

Added

  • Added BINARY and VARBINARY support for Phalcon\Db\Adapter\Mysql #14927
  • Added Phalcon\Db\Profiler\Item::getTotalElapsedNanoseconds() and Phalcon\Db\Profiler\Item::getTotalElapsedMilliseconds() for more precision #15249
  • Added Phalcon\Http\Response\Cookies::isSent() and Phalcon\Http\Response\Headers::isSent(); Added logic to not send the headers or cookies twice. #15334
  • Added Phalcon\Validation\Validator\File\AbstractFile::checkIsUploadedFile() method to allow overriding when adding files to the $_FILES array directly (not uploading). #15051
  • Added Phalcon\Support\Helper\Str\Interpolate to be used throughout the code for interpolation (Logger/Translator) %type% to %level% to align with the variables #15411
  • Added Phalcon\Support\HelperFactory for an easier creation/access of helpers #15411

Fixed

  • Corrected the Phalcon\Db\Profiler\Item calculation for seconds #15249
  • Corrected Phalcon\Http\Message\ServerRequestFactory to populate with superglobals #15286
  • Corrected Phalcon\Mvc\Model\Query\BuilderInterface::orderBy to use var instead of string #15415
  • Corrected Phalcon\Db\Adapter\Pdo\AbstractPdo::connect to take into account the persistent option for relevant connections #15241
  • Corrected Phalcon\Image\Adapter\Gd::processText to correctly call imagettfbbox when a font is specified #15188
  • Corrected Phalcon\Cache to cast keys as strings before sending them to adapters #15249
  • Binding form values with specified whitelist #15070

5.0.0-alpha.1 (2021-03-31)

Fixed

  • Support for PHP 7.4 and PHP 8.0
  • Fixed Logger\Log::log() log to recognize all log levels #15214
  • Changed setClaims to be protected so that the Phalcon\Security\JWT\Builder class can be properly extended. #15322
  • Fixed Phalcon\Mvc\Model::average() to return float value when is string #15287
  • Fixed Phalcon\Storage\Serializer\Igbinary to store is_numeric and bool values properly #15240
  • Fixed Phalcon\Validation\Validator\Confirmation was failing to compare cases such as 000123 = 123 #15347
  • Fixed Phalcon\Storage\Adapter failing to retrieve empty like stored data (such as [], 0, false) 15125
  • Fixed declarations for function getEventsManager() to allow null return 15010
  • Removed underscore from method names (starting) to abide with PSR-12 15345
  • Fixed Phalcon\Flash\Session::has() to properly check if any messages are existing 15204
  • Fixed signature of Phalcon\Forms\Element\Select::__construct()
  • Fixed signature of Phalcon\Assets\Manager::addCss()
  • Fixed signature of Phalcon\Assets\Manager::addJs()
  • Fixed signature of Phalcon\Db\Adapter\AdapterInterface::execute(), Phalcon\Db\Adapter\AdapterInterface::fetchOne() and Phalcon\Db\Adapter\AdapterInterface::query()
  • Fixed Phalcon\Annotations\Reader::parse() to return constants annotations #15919
  • Added Phalcon\Annotations\Reflection::getConstantsAnnotations() method that returns constants annotations #15919
  • Changes to the Phalcon\Annotations\Adapter\AdapterInterface:
    • Added getConstant() method that returns class constant annotations collection
    • Added getConstants() method that returns class constants annotations array list