CHANGELOG-5.0.md
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 #16840Phalcon\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 #16570Phalcon\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+ #16613Phalcon\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+ #16613Phalcon\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 #16946Phalcon\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 #16648Phalcon\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 #16650Phalcon\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 #16544Phalcon\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 #16630Phalcon\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 #16566Phalcon\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 #16581Phalcon\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 #16599Phalcon\Mvc\Model - saving a model with multiple fields relations threw "Not implemented" #16029Phalcon\Assets\Manager filter type check from is_object() to typeof and updated the error message to "The filter is not valid" #16889Phalcon\Cache\AbstractCache::doDeleteMultiple() to delegate to the storage adapter's deleteMultiple() instead of looping over individual delete() calls #16859Phalcon\Di\Exception message for missing services from "was not found in the dependency injection container" to "is not registered in the container" #16889Phalcon\Di\Service\Builder error messages for service parameters to use double quotes instead of single quotes #16889Phalcon\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 #16894Phalcon\Forms\Element\Select::render() to use TagFactory-based Html\Helper\Input\Select instead of the deprecated Phalcon\Tag\Select #16894Phalcon\Html\TagFactory to accept an optional ResponseInterface in the constructor (useful for preload) #16892Phalcon\Mvc\Controller and Phalcon\Mvc\View\Engine\AbstractEngine to be events aware #16890Phalcon\Mvc\View\Engine\Volt\Compiler::setOptions to return $this now #16891globals_get and globals_set in the code with Phalcon\Support\Settings::get()/set() #16884"does not" instead of "doesn't" for consistency #16889Phalcon\Encryption\Security\Uuid factory and versioned adapters (Version1–Version7) with a UuidInterface carrying standard RFC 4122 namespace constants; each version is a singleton cached by the factory, invoked via v1()–v7() #16326Phalcon\Html\Helper\FriendlyTitle - available via TagFactory as friendlyTitle [#16892(https://github.com/phalcon/cphalcon/issues/16892)Phalcon\Html\Helper\Input\Select::fromData() to populate select options from a SelectDataInterface provider, with optgroup support #16894Phalcon\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 #16894Phalcon\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)Phalcon\Mvc\Model\Resultset::refresh() to re-execute the underlying query and update the resultset with fresh data from the database #16409deleteMultiple() to Phalcon\Storage\Adapter\* to delete multiple keys in a single operation using native batch capabilities per adapter #16859Phalcon\Cache\AbstractCache::doDeleteMultiple() throwing InvalidArgumentException for keys containing invalid characters #16859Phalcon\Forms\Exception::tagFactoryNotFound() and Phalcon\Forms\Exception::usingParameterRequired() #16894Phalcon\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 #15829Phalcon\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" #16409Phalcon\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.) #16440Phalcon\Filter\Validation::bind() to skip the dependency injection container lookup when data is empty, preventing unnecessary Di\Exception errors #16889Phalcon\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 #15491Phalcon\Filter\Validation\AbstractValidator::messageFactory() to pass the joined field string to Phalcon\Messages\Message instead of the raw array when multiple fields are provided #16889Phalcon\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 #16200Phalcon\Forms\Form::isValid() to apply field filters even when no validators are specified (again) #16830Phalcon\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 #16889Phalcon\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 #16304Phalcon\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 #14957Phalcon\Http\Response::setStatusCode() exception message from "Non-standard statuscode given without a message" to "Non-standard status-code given without a message" #16889Phalcon\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 #16156Phalcon\Image\Adapter\Gd::processResize() to preserve PNG alpha channel transparency by replacing imagescale() with imagecreatetruecolor() + imagealphablending(false) + imagesavealpha(true) + imagecopyresampled() #16316Phalcon\Image\Adapter\Imagick::processPixelate() to explicitly cast division result to int to prevent implicit float-to-int deprecation #16889Phalcon\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 #15554Phalcon\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 #15906Phalcon\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 #15837Phalcon\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 #14810Phalcon\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 #16000Phalcon\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 #16453Phalcon\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 #15828Phalcon\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 #16410Phalcon\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 #16409Phalcon\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 #15711Phalcon\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 #15711Phalcon\Mvc\Model\Manager::getRelationRecords() to apply reusable caching for hasManyToMany and hasOneThrough relations; reusable: true was previously ignored for through-relations #15934Phalcon\Mvc\Model\Query::executeSelect() to embed Phalcon\Db\RawValue bind parameters directly in the SQL string instead of passing them to PDO #16350Phalcon\Mvc\Model\Query::executeSelect() to use the write connection when the query contains a FOR UPDATE clause, instead of always using the read connection #16032Phalcon\Mvc\Model\Query::getExpression() to emit NOT BETWEEN instead of BETWEEN NOT for the PHQL_T_BETWEEN_NOT token, producing valid SQL #16812Phalcon\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) #16052Phalcon\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 #14656Phalcon\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) #16239Phalcon\Mvc\Model\Transaction\Manager::collectTransaction() to keep the correct transactions when rebuilding the list after removal #16522Phalcon\Mvc\Model\Transaction\Manager::commit() to remove each transaction from the pool after committing so that subsequent get() calls return a fresh transaction #16522Phalcon\Mvc\Model to handle the `lastInsertId correctly under Postgres #16920 #16436 #15775Phalcon\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 #16238Phalcon\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 #15912Phalcon\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 #15266Phalcon\Storage\Adapter\Libmemcached, Phalcon\Storage\Adapter\Redis and Phalcon\Storage\Adapter\Weak to call initSerializer() during construction #16889Phalcon\Storage\Adapter\Redis to initialize lifetime from options during construction #16889Phalcon\Support\Helper\Json\Encode to prefix the InvalidArgumentException message with "json_encode error: " for consistency #16889Phalcon\Storage\Adapter\RedisCluster adapter to support Redis Cluster connections #16867Phalcon\Support\Settings to be used for ini settings throughout the framework #16873Phalcon\Encryption\Security::computeHmac() to catch \ValueError thrown by PHP 8.1+ when an unknown hashing algorithm is passed #16893Phalcon\Translate\Adapter\Gettext::setLocale() to call setlocale when it is available, removing warnings in PHP 8.5 #16886Phalcon\Filter\Sanitize\IP to optimize the sanatization of IP address #16838Phalcon\Encryption\Security\JWT\Builder::setPassphrase() to require digits and special characters #16847Phalcon\Encryption\Security\JWT\Builder::getAudience() to return an empty array if not set #16846Phalcon\Encryption\Security\Random::base() to use 16 bits by default #16845Phalcon\Logger\Logger to use lowercase when reporting log levels (previously uppercase) #16852Phalcon\Logger\Adapter\Stream to use a more efficient way to write messages in the logger instead of opening and closing the stream per message #16852Phalcon\Logger\Adapter\Syslog to use the Enum instead of Logger constants #16852Phalcon\Di\Di services.#13042Phalcon\Encryption\Security\JWT\Validator::validateClaim() to validate custom claims #16843Phalcon\Forms\Form::isValid() to apply field filters even when no validators are specified #16830Phalcon\Http\Request method getClientAddress() when using trustForwardedHeader #16836Phalcon\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() #16261Phalcon\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 #16806bind() 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 #16800Phalcon\Storage\Adapters\Libmemcached::getAdapter() to use 50ms for \Memcached::OPT_CONNECT_TIMEOUT #16818Phalcon\Html\Helper\Input\* to honor Docbloc directives #16778fails() method helper to Phalcon\Filter\Validation useful for standalone validation #16798Phalcon\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.Phalcon\Http\Request method getClientAddress(true) to return correct IP address from trusted forwarded proxy. #16777Phalcon\Http\Request method getPost() to correctly return json data as well and unified both getPut() and getPatch() to go through the same parsing method. #16792Phalcon\Filter\Validation method bind() and validate() to correctly bind data when using entity as well as skip binding of fields not included in $whitelist #16800Phalcon\Http\Request method getPostData() when Content-Type header is not set #16804Phalcon\Events\ManagerInterface adding priority property #16817Phalcon\Storage\Adapters\Libmemcached::getAdapter() to correctly merge adapter options #16818Phalcon\Encryption\Crypt method checkCipherHashIsAvailable(string $cipher, string $type) to correctly check the cipher or hash type #16822Phalcon\Mvc\Model docblocks #16825Phalcon\Mvc\Router::setUriSource() to allow URI processing from $_GET['url'] or $_SERVER['REQUEST_URI'] as it was in v3 #16741Phalcon\Mvc\Router to correctly handle numeric URI parts as it was in v3 #16741Phalcon\Mvc\Model\Binder to use ReflectionParameter::getType() instead of deprecated method, PHP 8.0 or higher issue. #16742Phalcon\Mvc\Model\Query to check if cache entry exists. #16747Phalcon\Mvc\Router to correctly match route when using query string URIs. #16749Phalcon\Mvc\Model::cloneResultset to properly parse fields that do not accept null values #16736Phalcon\Translate\Adapter\Csv the escape argument is explicitly required in PHP 8.4 #16733Phalcon\Mvc\Model\Query to use the cacheOptions lifetime over the "cache" service lifetimePhalcon\Storage\Adapter\AbstractAdapter and dropped has() check before receiving the value. #16705Phalcon\Html\Helper\Breadcrumbs component to replace the old Phalcon\Html\Breadcrumbs component. #16727Phalcon\Mvc\Micro\LazyLoader::callMethod to prevent Unknown named parameter error #16724Phalcon\Filter\Validation\Validator\Email to allow UTF8 in local part. #16637Phalcon\Cache\Cache::getMultiple() to use mget() when the Phalcon\Cache\Adapter\Redis is used. #16689Storage\Adapter\Redis to accept ssl in the options for secure connections. #16711dispatch:beforeCallAction and dispatch:afterCallAction to last-minute modifications to handler and method (mostly for debugging).Phalcon\Forms\Form and Phalcon\Filter\Validation to correctly handle the validate() response when using validation class beforeValidate() #16702Phalcon\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 #16649Phalcon\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 #16649Phalcon\Encryption\Crypt to use strlen instead of mb_strlen for padding calculations #16642Phalcon\Filter\Validation\Validator\File\MimeType::validate to close the handle when using finfo #16647Phalcon\Mvc\Model\Manager::getRelationRecords to explicitly set the referencedModel in the conditions along with the referencedFields #16655Phalcon\Image\Adapters\AbstractAdapter::watermark to correctly calculate the Y offset #16658Phalcon\Dispatcher\AbstractDispatcher when calling action methods that do not define parameters to prevent Unknown named parameter error.Phalcon\Di\Injectable to reference the correct instance of Phalcon\Di\Di in the docblock property #16634Phalcon\Filter\Filter to have the correct docblock for IDE completionPhalcon\Mvc\Model\Query to use the lifetime in the "cache" service if none has been supplied by the options #16696Phalcon\Session\Adapter\Stream::gc() to throw an exception if something is wrong with glob() #16713Phalcon\Http\Request::getBasicAuth() to return a null password if not defined on the server #16668Phalcon\Di\Injectable to reference the correct instance of Phalcon\Di\Di in the docblock property #16634Phalcon\Mvc\Model, Phalcon\Support\Collection and Phalcon\Support\Registry to correctly implement \Serializable interface. #16591Phalcon\Mvc\Router\Group::getHostname() to return null also. #16601Phalcon\Mvc\View\Engine\Volt\Compiler::compileSource to also return array #16608Phalcon\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. #16606Phalcon\Support\Helper\PascalCase causing memory leak by anonymous function #16593Phalcon\Mvc\Model\Query to rollback failed transactions and re-throw exception for data consistency #16604Phalcon\Support\HelperFactory to use the internal mapper for better memory management #16571phalcon.form.strict_entity_property_check for Phalcon\Forms\Form to enable strict entity property checking. #16567Phalcon\Mvc\Cli\Router to extend the Phalcon\Mvc\Cli\RouterInterface #16551Phalcon\Filter\Validation\Validator\StringLength::validate() to correctly use the include parameter #16560Phalcon\Db\Column::TYPE_BINARY and Phalcon\Db\Column::TYPE_TINYINTEGER to have unique values #16532Phalcon\Forms\Form to bind only existing properties on entities, based on phalcon.form.strict_entity_property_check setting. #16567Phalcon\Filter\Sanitize\BoolVal to correctly handle integers. #16582Phalcon\Mvc\View\Engine\Volt\Compiler::filter to use the helper with upper and lower for UTF-8 characters #16543Phalcon\Di\AbstractInjectionAware to extend stdClass for PHP 8.2 deprecation warnings #16543Phalcon\Cli\Router::setDefaultAction and Phalcon\Cli\Router::setDefaultModule to return the object back for a fluent interface #16328Phalcon\Db\Adapter\Pdo\Postgresql::describeColumns() to return the correct string back #16371Phalcon/Filter/Validation::validate() and Phalcon/Filter/Validation/ValidationInterface::validate() to return also bool #16337Phalcon\Mvc\Model::toArray to ignore getters when the field name is source. #16514Phalcon\Http\Request::getPut to correctly get form encoded data #16519Use of "static" in callables is deprecated for PHP 8.2+ #16263Phalcon\Db\Adapter\Pdo\Mysql to not use specific flags for PDO (PDO::ATTR_EMULATE_PREPARES or PDO::ATTR_STRINGIFY_FETCHES) for performance reasons #16474Phalcon\Db\AbstractDb with Phalcon\Db\Adapter\AbstractAdapter since the former was not used #16474resetColumns(), resetFrom(), resetWhere(), resetGroupBy(), resetHaving(), resetOrderBy(), resetLimit(), resetFlags() to the Phalcon\Datamapper\Query\AbstractQuery to allow resetting query filters.Phalcon\Mvc\Model::count to ignore the order parameter (needed for Posgresql) #16471Phalcon\Mvc\Model::toArray added parameter to ignore getters in order not to break serialize. #16490Phalcon\Mvc\Model::toArray changing the conditionals for population to remove segfault. #16498Phalcon\Mvc\Model::toArray to use getters if present #16320int|false in Phalcon\Session\Adapter\*::gc() #16477Phalcon\Config\Adapter\Ini::cast() to mixed #16477Phalcon\Filter\Validation\Validator\Numericality to return false when input has spaces #16461Phalcon\Mvc\Model\ResultsetSimple::toArray to ignore numeric indexes in case results come as not fetch_assoc #16467Phalcon\Mvc\Model::getMessages() to also filter with an array of fields #16265Phalcon\DataMapper\Query\Select::columns() to accept an array of columns (keys as aliases) instead of func_get_args #16451Phalcon\Html\Helper\AbstractSeries::__invoke() to no longer clear the internal store when called #16441Phalcon\Logger\Formatter\Line #16430Phalcon\Html\Helper\AbstractSeries::reset() to clear the internal store when needed #16441Phalcon\Filter\Validation\Validator\Size\* validators to correctly detect the size of uploaded files #16390Phalcon\Mvc\Model::save() #16395Phalcon\Mvc\Router::handle() #16431Phalcon\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. #16391Phalcon\Mvc\Model\Metadata::initialize #16393Phalcon\Mvc\Model::appendMessagedFrom for code consistency and to add messages from another model #16391Phalcon\Autoload\Loader::isRegistered for debugging purposes #16391Phalcon\Mvc\Model\Metadata::initializeMetadata #16393Phalcon\Mvc\Model\Metadata::getMetaDataUniqueKey #16393Phalcon\Mvc\Model\Metadata::getColumnMapUniqueKey #16393Phalcon\Encryption\Security\JWT\Builder::addHeader() to allow adding custom headers #16396routeId in Phalcon\Mvc\Router\Route to always return a string #16414getAdapter() in Phalcon\Mvc\Model\Metadata to retrieve the internal cache adapter if necessary. #16244Phalcon\Storage\Adapter\Weak implemented with WeakReference has a cache/retrieval solution for objects not yet collected by the Garbage Collection. #16372Phalcon\Di\Injectable from stdClass to remove the deprecation warning (dynamic properties) for PHP 8.2 #16308Phalcon\Mvc\View::getVar() so that stubs can be accurate. #16276encode/decode methods for JSON to use the Phalcon\Support\Helper\Json\* classes. #15608Phalcon\Support\Helper\Json\* classes to clear up json_last_error() before doing any conversions. #15608Phalcon\Http\Request::getJsonRawBody to protect from empty body #16373Encryption\Crypt::checkCipherHashIsAvailable to allow proper setting of the hash #16314unlikely from if statements from the Stream storage adapter and Json serializer #16339Storage\Adapter\Stream::get()/set() to correctly calculate the path if the prefix is present in the key #16348Html\Helper\Input\Checkbox to correctly process empty values #15959Phalcon\Html\Helper\Title::prepend to correctly prepend text in subsequent calls #16283Phalcon\Acl\Adapter\Memory::isAllowed to not use the deprecated ReflectionType::getClass #16255Phalcon\Mvc\Micro::handle to type check an object for the finish #16240Phalcon\DI\Service::resolve to not call the get() from the container and cause an infinite loop #15032Phalcon\Support\Debug to correctly calculate the documents URL for the hyperlinks #16223Phalcon\Html\TagFactory docblock for autocompletion (https://github.com/phalcon/cphalcon/commit/0129658f3ac468dcc5294d401403e166302a8069)Phalcon\Db\Profiler by correctly calculating the seconds (reapplied changes) #15822Phalcon\Html\TagFactory to the Phalcon\Di\FactoryDefault\Cli #16233Phalcon\Filter::sanitize to return correct data when noRecursive is true #16199Phalcon\Html\Escaper::html to not return null when a zero string is passed #16202Phalcon\Http\Request::getPatch() to get a value from a PATCH request #16188Phalcon\Http\Request::getFilteredPatch() to get a value filtered from a PATCH request #16188Phalcon\Http\Request::hasPatch() to check if a value exist in a PATCH request #16188Phalcon\Mvc\View\Engine\Volt\Compiler::isTagFactory to correctly detect a TagFactory object without throwing an error #16097Phalcon\Cli, Phalcon\Dispatcher and Phalcon\Application components to ensure not null values are passed to methods #16186Phalcon\Form::clear to correctly clear the elements and not recurse #15956Phalcon\Config\Config::setData to pass the insensitive flag to child objects #16171Phalcon\Config\Adapter\Groupped::__construct to pass the insensitive flag to child objects #16171Phalcon\Session\Manager::setName, removing the regex check for the name for custom adapters to work with create_sid() #16170PdoResult::fetchAll when passed class name in 2nd argument #16177Forms\Form::label to accept an array as a default variable #16180Phalcon\Encryption\Security to take into account the workFactor in the cost calculation #16153Phalcon\Db\Adapter\Pdo\Mysql::describeIndexes to assign an empty string in the index type of null and remove warnings #16157Phalcon\Db\Adapter\Pdo\Sqlite::describeIndexes to assign an empty string in the index type of null and remove warnings #16157Phalcon\Mvc\Model\Manager::notifyEvent to return true instead of null on success #16161Phalcon\Encryption\Security\JWT\Validator::validateExpiration to correctly validate the exp claim #16166Phalcon\Filter\Sanitize\StringVal to accept flags for htmlspecialchars() #16135Phalcon\Html\Escaper::attributes() to honor the $flags set for htmlspecialchars() #16134Phalcon\Html\Escaper::attributes() to accept any value and transform it to string #16123Phalcon\Logger\AbstractLogger::getLevelNumber() to better check for string levels #16123Phalcon\Encryption\Security\JWT\Validator::get() and Phalcon\Encryption\Security\JWT\Validator::set() for validation data #16115Phalcon\Encryption\Security\JWT\Token\Token::validate() to correctly call validator methods #16115Phalcon\Logger\Adapter\Stream::process to open the log file, check for locks, write contents and close the stream #16072array in Phalcon\Annotations\Reflection class methods #16106Phalcon\Html\Escaper::attributes() to also accept an array of attributes #16108Phalcon\Encryption\Security\JWT\Token::validate() to validate a token's claims #16094Phalcon\Encryption\Security\JWT\Token::verify() to verify a token's signature #16094Phalcon\Encryption\Security\JWT\Validator::getErrors() to return any errors with the validation as an array #16094object & ?object #16023Phalcon\Filter\Validation\Validator\Digit to use only strings for ctype_* calls #16064Phalcon\Flash\AbstractFlash::outputMessage to return the message (implicitFlush) #16063Phalcon\Filter\Validation\Validator\Numericality to correctly detect illegal characters within string numbers #16070Phalcon\Mvc\Model class #16080tag helpers only accept parameters with double quotesPhalcon\Tag::form() to Phalcon\Tag::formLegacy (helper form_legacy) #16019Phalcon\Cli\Router::getMatchedRoute()Phalcon\Cli\RouterInterface::getMatchedRoute()Phalcon\Mvc\Router::getMatchedRoute()Phalcon\Mvc\RouterInterface::getMatchedRoute() to return RouterInterface or null #16030Phalcon/Storage/Serializer/Base64::unserialize()Phalcon/Storage/Serializer/Igbinary::unserialize()Phalcon/Storage/Serializer/Igbinary::serialize()Phalcon/Storage/Serializer/Php::unserialize() to reset isSuccess value #16040Phalcon\Paginator\Adapter\Model::paginate() fix group parameter breaking total items #16042Phalcon\Mvc\Model::doLowUpdate() prevent RawValue getting overwritten #16037Phalcon\Image\*
getInternalImImage() (same as getImage()) for Phalcon\Image\Adapter\Imagickwebp images for Phalcon\Image\Adapter\Gd #15977Phalcon\Mvc\Model\ManagerInterface::getBuilder() to return the existing builder (created by createBuilder()) #15966Phalcon\Mvc\Model\Manager::getBuilder() to return the existing builder (created by createBuilder()) #15966Phalcon\Tag::textArea() to check if the value is null before calling htmlspecialchars #15992Phalcon/Filter/Validation/Validator/AlnumPhalcon/Filter/Validation/Validator/AlphaPhalcon/Filter/Validation/Validator/ConfirmationPhalcon/Filter/Validation/Validator/CreditCardPhalcon/Filter/Validation/Validator/StringLength/MaxPhalcon/Filter/Validation/Validator/StringLength/Min to check if the value is null before calling internal PHP methods #15992Phalcon\Html\Helper\Title to properly use indent and delimiter #15984Phalcon\Html\Helper\Doctype to properly use indent and delimiter #15984Phalcon\Mvc\View\Engine\Volt::isIncluded() and Phalcon\Mvc\View\Engine\Volt::length() to check for null values before calls to php methods #15984Phalcon\Mvc\View\Engine\Volt\Compiler::expression() to use double quotes instead of single ones #15984Phalcon\Support\Version::getPart() to always return string values #15984Phalcon\Dispatcher\DispatcherInterface::setModuleName() to accept null #15997Phalcon\Dispatcher\AbstractDispatcher::setModuleName() to accept null #15997Phalcon\Dispatcher\AbstractDispatcher::getModuleName() to also return null #15997StringVal filter to now use htmlspecialchars() #15978StringValLegacy filter using filter_var() for PHP < 8.1 #15978Phalcon\Http\Response::getQualityHeader() to check if the server variable is null before performing preg_split #15984Phalcon\Session\Bag::__construct() to accept a Phalcon\Session\Manager as the first parameter and name as the second one #15904Phalcon\Logger\Logger to no longer depend on PSR interfaces #15925Phalcon\Cache\Cache to no longer depend on PSR interfaces #15927Phalcon\Html\Link to no longer depend on PSR interfaces #15930Phalcon\Encryption\Crypt::isValidDecryptLength($input) to allow checking for the length of the decryption string #15879Phalcon\Di\InitializationAwareInterface to allow auto calling the initialize method when accessing service through DIC #15916Phalcon\Storage\Serializer\MemcachedIgbinaryPhalcon\Storage\Serializer\MemcachedJsonPhalcon\Storage\Serializer\MemcachedPhpPhalcon\Storage\Serializer\RedisIgbinaryPhalcon\Storage\Serializer\RedisJsonPhalcon\Storage\Serializer\RedisMsgpackPhalcon\Storage\Serializer\RedisNonePhalcon\Storage\Serializer\RedisPhp to be used if adapter serialization is required #15904Phalcon\Logger\LoggerInterfacePhalcon\Logger\AbstractLogger to be used in the logger class but also the proxy-psr3 repo #15925Phalcon\Cache\CacheInterfacePhalcon\Cache\AbstractCache to be used in the cache class but also the proxy-psr16 repo #15927Phalcon\Html\Link\Interfaces\EvolvableLinkProviderInterfacePhalcon\Html\Link\Interfaces\LinkInterfacePhalcon\Html\Link\Interfaces\LinkProviderInterfacePhalcon\Html\Link\AbstractLinkPhalcon\Html\Link\AbstractLinkProvider to be used in the link class but also the proxy-psr13 repo #15930Phalcon\Translate\Adapter\Csv::toArray() and Phalcon\Translate\Adapter\NativeArray::toArray() to return the translation array back #15902Phalcon\Html\Helper\Input\Numeric to produce correct elements #15896Phalcon\Storage\Adapter\* to correctly store null values #15904Phalcon\Container\Container and moved its contents to the proxy-psr11 repo #15928Phalcon\Http\Message\* and Phalcon\Http\Server\* classes. This removes PSR from Phalcon. PSR-7 available in v6 #15929Phalcon\Db\Result\Pdo to Phalcon\Db\Result\PdoResult to avoid collisions with \PDO #15874Phalcon\Validation to Phalcon\Filter\ValidationPhalcon\Html\Helper\Title:setSeparator to allow setting the separator independently #15866Phalcon\Logger\AbstractAdapter::getFormattedItem() to not add PHP_EOL at the end of the message and added it to the Phalcon\Logger\Adapter\Stream #14547Phalcon\Html\Helper\Title:__invoke() to not use the $separator as parameter - no need to redefine it in a view #15866Phalcon\Support\Helper\SnakeCase and Phalcon\Support\Helper\KamelCase #15850Phalcon\Mvc\Router\Route::getName() and Phalcon\Mvc\Router\Route::getHostname() to also return null #15880Phalcon\Mvc\Router\RouteInterface::getName() and Phalcon\Mvc\Router\RouteInterface::getHostname() to also return null #15880Phalcon\Mvc\Model::findFirst() to return mixed or null #15883Phalcon\Mvc\Model::belongsTo() parameter options array by default #15971Phalcon\Mvc\Model::hasMany() parameter options array by default #15971Phalcon\Mvc\Model::hasOne() parameter options array by default #15971Phalcon\Mvc\Model::hasOneThrough() parameter options array by default #15971Phalcon\Mvc\Model\Manager::addHasMany() parameter options array by default #15971Phalcon\Mvc\Model\Manager::addHasManyToMany() parameter options array by default #15971Phalcon\Mvc\Model\Manager::addHasOne() parameter options array by default #15971Phalcon\Mvc\Model\Manager::addHasOneThrough() parameter options array by default #15971Phalcon\Mvc\Model\Manager::addBelongsTo() parameter options array by default #15971Phalcon\Support\Helper\Str\KebabCase, Phalcon\Support\Helper\Str\PascalCase and Phalcon\Support\Helper\Str\SnakeCase helpers #15850Phalcon\Mvc\View\Engine\Volt\Compiler::functionCall() to check for container presence before checking the tag service #15842Phalcon\Di\FactoryDefault() to set assets and tag as shared services #15847Phalcon\Forms\Element\AbstractElement::getLocalTagFactory() to return the tagFactory from itself, the form, the DI or a new instance #15847sha1 with hash("sha256", $data) to ensure that there are no collisions from the hashing algorithm #15844Phalcon\Support\Helper\Str\Camelize to accept a third boolean parameter indicating whether the result will have the first letter capitalized or not #15850Phalcon\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() #15785Phalcon\Container to Phalcon\Container\Container #15796Phalcon\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. #15370Phalcon\Registry to Phalcon\Support\Registry #15802Phalcon\Url to Phalcon\Mvc\Url #15798Phalcon\Loader to Phalcon\Autoload\Loader #15797Phalcon\Autoload\Loader:
registerClasses() to setClasses()registerDirectories() to setDirectories()registerExtensions() to setExtensions()registerFiles() to setFiles()registerNamespaces() to setNamespaces() #15797Phalcon\Di to Phalcon\Di\Di #15799Phalcon\Tag from the framework in favor of Phalcon\Html\TagFactory #15801Phalcon\Forms\Form requires a Phalcon\Html\TagFactory to be set before it can render elements #15801Phalcon\Di\FactoryDefault will now return a Phalcon\Html\TagFactory for the tag service #15801Phalcon\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() #15785filter, camelize, dynamic and uncamelize in Phalcon\Support\HelperFactory #15805Phalcon\Autoload\Loader::getDebug() to collect debugging information from the loader (enabled from the constructor) #15797Phalcon\Logger\LoggerFactory::load() to correctly use the key of the adapters array as the name of the adapter #15831Phalcon\Dispatcher\Dispatcher::setParams() not updating local params during dispatch() loop #15603belongsTo() relation #15148Phalcon\Exception; replaced by \Exception #15800Phalcon\Acl:
Phalcon\Acl\ComponentAware to Phalcon\Acl\ComponentAwareInterfacePhalcon\Acl\RoleAware to Phalcon\Acl\RoleAwareInterface #15691require to require_once in Phalcon\Loader to avoid conflicts with other loaders #15489require to require_once in Phalcon\Cli\Console and Phalcon\Mvc\Application for a bit of extra performance #15489Phalcon\Collection has been moved under the Support namespace:
Phalcon\Collection to Phalcon\Support\CollectionPhalcon\Collection\Exception to Phalcon\Support\Collection\ExceptionPhalcon\Collection\ReadOnly to Phalcon\Support\Collection\ReadOnlyPhalcon\Collection to Phalcon\Support\Collection #15700Phalcon\Session\Bag:
Phalcon\Session\Bag::construct to accept a container instead of internally calling the defaultPhalcon\Session\Bag::construct to throw an exception if the container is not specifiedPhalcon\Session\Bag::init to store the data in the session #15494Phalcon\Events\Event::construct() to allow source to be nullable #15133Phalcon\Crypt
Phalcon\Crypt\Exception to Phalcon\Crypt\Exception\ExceptionPhalcon\Crypt\Mismatch to Phalcon\Crypt\Exception\MismatchauthTag with the encryption string and process it with the decryption string #15717Phalcon\Encryption
Phalcon\Crypt to Phalcon\Encryption\CryptPhalcon\Security to Phalcon\Encryption\SecuritySecurity namespace under Encryption
Security\JWT\Exceptions\UnsupportedAlgorithmException to Encryption\Security\JWT\Exceptions\UnsupportedAlgorithmExceptionSecurity\JWT\Exceptions\ValidatorException to Encryption\Security\JWT\Exceptions\ValidatorExceptionSecurity\JWT\Signer\AbstractSigner to Encryption\Security\JWT\Signer\AbstractSignerSecurity\JWT\Signer\Hmac to Encryption\Security\JWT\Signer\HmacSecurity\JWT\Signer\None to Encryption\Security\JWT\Signer\NoneSecurity\JWT\Signer\SignerInterface to Encryption\Security\JWT\Signer\SignerInterfaceSecurity\JWT\Token\AbstractItem to Encryption\Security\JWT\Token\AbstractItemSecurity\JWT\Token\Enum to Encryption\Security\JWT\Token\EnumSecurity\JWT\Token\Item to Encryption\Security\JWT\Token\ItemSecurity\JWT\Token\Parser to Encryption\Security\JWT\Token\ParserSecurity\JWT\Token\Signature to Encryption\Security\JWT\Token\SignatureSecurity\JWT\Token\Token to Encryption\Security\JWT\Token\TokenSecurity\JWT\Builder to Encryption\Security\JWT\BuilderSecurity\JWT\Validator to Encryption\Security\JWT\ValidatorSecurity\JWT\Validator to Encryption\Security\JWT\ValidatorSecurity\Exception to Encryption\Security\ExceptionSecurity\Random to Encryption\Security\Random #15729Phalcon\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() #15717Phalcon\Factory\AdapterFactory::getAdapters() to Phalcon\Factory\AdapterFactory::getServices() #15717Phalcon\Crypt\Crypt::__construct() to have useSigning set to true by default #15717Phalcon\Config
Phalcon\Config to Phalcon\Config\ConfigPhalcon\Config\Config::path by making the delimiter parameter a stringPhalcon\Config\Adapter\Ini::__construct to not accept null as the mode. The default is now INI_SCANNER_NORMAL (2)Phalcon\Db\Adapter\AdapterInterface::getInternalHandler() and Phalcon\Db\Adapter\Pdo\AbstractPdo::getInternalHandler() to return var instead of \PDO for custom adapters with different engines #15119Phalcon\Filter to Phalcon\Filter\Filter; added more tests #15726Phalcon\Mvc\Model::getPreparedQuery() to return QueryInterface instead of Query #15562Phalcon\Cache to Phalcon\Cache\Cache #15728Phalcon\Factory\AdapterFactory to define the factory exception in getExceptionClass() instead of a property. #15728Phalcon\Db\Adapter\AbstractAdapter::getSqlVariables() to Phalcon\Db\Adapter\AbstractAdapter::getSQLVariables() to align with the rest of the getSQL* methods #15637Phalcon\Logger to Phalcon\Logger\Logger #15727Phalcon\Escaper
Phalcon\Escaper to Phalcon\Html\EscaperPhalcon\Escaper\EscaperInterface to Phalcon\Html\Escaper\EscaperInterfacePhalcon\Escaper\Exception to Phalcon\Html\Escaper\ExceptionescapeCss() becomes css()escapeJs(), becomes js()escapeHtml() becomes html()escapeHtmlAttr() becomes attributes()escapeUrl() becomes url()setHtmlQuoteType() becomes setFlags() #15757Phalcon\Encryption\Security::hash() to also use password_hash() and accept ARGON2* algorithms #15731realClassName in Phalcon\Mvc\Router\Route::getRoutePaths() if definition is string to make processing same as if array definition #15067Phalcon\Validation::getValue() behavior to get value from data if not found in entity. #14203Phalcon\Forms\Form::isValid() signature: added whitelist argument. #14203Phalcon\Support\Collection\ReadOnly to Phalcon\Support\Collection\ReadOnlyCollection to avoid conflicts with the read-only feature in PHP 8.1 #15767Phalcon\Text - replaced by Phalcon\Support\Helper\Str\* #15776Phalcon\Helper\Arr - replaced by Phalcon\Support\Helper\Arr\* #15776Phalcon\Helper\File - replaced by Phalcon\Support\Helper\File\* #15776Phalcon\Helper\Json - replaced by Phalcon\Support\Helper\Json\* #15776Phalcon\Helper\Number - replaced by Phalcon\Support\Helper\Number\* #15776Phalcon\Helper\Str - replaced by Phalcon\Support\Helper\Str\* #15776Phalcon\Text, Phacon\Helper\* from the code replacing it with Phalcon\Support\Helper\* #15776phalcon/phalcon thus increasing coverage #15776Phalcon\Assets\Manager to require a Phalcon\Html\TagFactory in its constructor #15776Phalcon\Events\AbstractEventsAware class to handle the Events Manager when necessary #15691Phalcon\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) #15154Phalcon\Crypt
Phalcon\Crypt\Padding\PadInteface and padding adapters
Phalcon\Crypt\Padding\AnsiPhalcon\Crypt\Padding\Iso10126Phalcon\Crypt\Padding\IsoIekPhalcon\Crypt\Padding\NoopPhalcon\Crypt\Padding\PadInterfacePhalcon\Crypt\Padding\Pkcs7Phalcon\Crypt\Padding\SpacePhalcon\Crypt\Padding\ZeroPhalcon\Crypt\PadFactory to easily create padding adaptersPhalcon\Cache\Adapter\*::setForever() and Phalcon\Storage\Adapter\*::setForever() to allow storing a key forever #15485Phalcon\Encryption\Security::getHashInformation() to return information for a hash #15731Phalcon\Encryption\Security::CRYPT_ARGON2I and Phalcon\Encryption\Security::CRYPT_ARGON2ID #15731allowEmpty checks to common validators #15515Phalcon\Forms\Form::getFilteredValue() to get filtered value without providing entity #15438Phalcon\Forms\Form::setWhitelist() and Phalcon\Forms\Form::getWhitelist() #14203dirtyState serialization in Phalcon\Mvc\Model #15571Phalcon\Html\TagFactory (call service as a method) #15776Phalcon\Support\HelperFactory (call service as a method) #15776Phalcon\Html\Helper\Doctype helper for doctype generation #15776style or link tag option for Phalcon\Html\Helper\Style #15776Query::getExpression() return type #15553Phalcon\Mvc\Model::getRelated() to correctly return relationships (cached or not) when the foreign key has changed #15649Phalcon\Db\Adapter\Pdo\*, Phalcon\Mvc\Model and Phalcon\Mvc\Model\MetaData\Strategy\Annotations to treat BIGINT numbers as string #15632Phalcon\Crypt\Crypt::decrypt() to correctly calculate the hash when using signed mode #15717Phalcon\Mvc\Model\Manager::isVisibleModelProperty() to correctly check if setting property is visible #15276Phalcon\Config\Config::merge to retain numeric indexes in deep merges #14705phpinfo() #15269Phalcon\Storage\Adapter\Redis::getAdapter() and Phalcon\Cache\Adapter\Redis::getAdapter() to accept the connection timeout in the constructor options #15744Phalcon\Db\Adapter\AbstractAdapter::getSQLVariables() to return an empty array when initialized #15637Phalcon\Cache\Adapter\* and Phalcon\Storage\Adapter\* to delete a key when set() is called with a zero or negative TTL #15485Phalcon\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 #15361Phalcon\Validation\Validator\File to use messageFileEmpty #14928Phalcon\Db\RawValue usage bugs in Phalcon\Mvc\Model::doLowUpdate() #15413type attribute for stylesheet links #15776Phalcon\Debug to not throw an exception if a URL service is not present #15381Phalcon\Kernel - obsolete #15776Phalcon\Storage\Adapter\* and Phalcon\Cache\Adapter\* to allow an empty key prefix to be set if needed. #15480Phalcon\Db\Adapter\AdapterInterface:lastInsertId() to be identical as Pdo:lastInsertId()Phalcon\Db\Adapter\AdapterInterface:close() now returns void instead of boolPhalcon\Db\Adapter\AdapterInterface:connect() now returns void instead of bool and 1st argument default value is empty array instead of null #15659Phalcon\Security\JWT\Builder::addClaim for custom JWT claims. #15656Phalcon\Support\Helper namespace:
Phalcon\Support\HelperFactory, a handy factory to help with string, array and other manipulationshelper service in Phalon\Di\FactoryDefault and Phalcon\Di\FactoryDefault\Cli to point to the Phalcon\Support\HelperFactoryPhalcon\Support\Helper\Arr\BlacklistPhalcon\Support\Helper\Arr\ChunkPhalcon\Support\Helper\Arr\FirstPhalcon\Support\Helper\Arr\FirstKeyPhalcon\Support\Helper\Arr\FlattenPhalcon\Support\Helper\Arr\GetPhalcon\Support\Helper\Arr\GroupPhalcon\Support\Helper\Arr\HasPhalcon\Support\Helper\Arr\IsUniquePhalcon\Support\Helper\Arr\LastPhalcon\Support\Helper\Arr\LastKeyPhalcon\Support\Helper\Arr\OrderPhalcon\Support\Helper\Arr\PluckPhalcon\Support\Helper\Arr\SetPhalcon\Support\Helper\Arr\SliceLeftPhalcon\Support\Helper\Arr\SliceRightPhalcon\Support\Helper\Arr\SplitPhalcon\Support\Helper\Arr\ToObjectPhalcon\Support\Helper\Arr\ValidateAllPhalcon\Support\Helper\Arr\ValidateAnyPhalcon\Support\Helper\Arr\WhitelistPhalcon\Support\Helper\File\BasenamePhalcon\Support\Helper\Json\EncodePhalcon\Support\Helper\Json\DecodePhalcon\Support\Helper\Number\IsBetweenPhalcon\Support\Helper\Str\CamelizePhalcon\Support\Helper\Str\ConcatPhalcon\Support\Helper\Str\CountVowelsPhalcon\Support\Helper\Str\DecapitalizePhalcon\Support\Helper\Str\DecrementPhalcon\Support\Helper\Str\DirFromFilePhalcon\Support\Helper\Str\DirSeparatorPhalcon\Support\Helper\Str\DynamicPhalcon\Support\Helper\Str\EndsWithPhalcon\Support\Helper\Str\FirstBetweenPhalcon\Support\Helper\Str\FriendlyPhalcon\Support\Helper\Str\HumanizePhalcon\Support\Helper\Str\IncludesPhalcon\Support\Helper\Str\IncrementPhalcon\Support\Helper\Str\InterpolatePhalcon\Support\Helper\Str\IsAnagramPhalcon\Support\Helper\Str\IsLowerPhalcon\Support\Helper\Str\IsPalindromePhalcon\Support\Helper\Str\IsUpperPhalcon\Support\Helper\Str\LenPhalcon\Support\Helper\Str\LowerPhalcon\Support\Helper\Str\PrefixPhalcon\Support\Helper\Str\RandomPhalcon\Support\Helper\Str\ReduceSlashesPhalcon\Support\Helper\Str\StartsWithPhalcon\Support\Helper\Str\SuffixPhalcon\Support\Helper\Str\UcwordsPhalcon\Support\Helper\Str\UncamelizePhalcon\Support\Helper\Str\UnderscorePhalcon\Support\Helper\Str\Upper#15738build/phalcon/32bits, build/phalcon/64bits and build/phalcon/safe) into single universal inside build/phalcon #15647build/ directory #15647composer.json to use PSR 1.1.x #15504Phalcon\Di\Injectable:getDI() to set default DI when no DI is set #15629Phalcon\Flash\Direct::setCssIconClasses and Phalcon\Flash\Session::setCssIconClasses to allow setting icons in the flash messages (bootstrap related) #15292Phalcon\Http\Message\RequestMethodInterface and Phalcon\Http\Message\ResponseStatusCodeInterface that contain constants to be used for any HTTP implementations (see PHP-FIG) #15615Phalcon\Container interface to abide with Psr\Container\ContainerInterface after the upgrade to PSR 1.1.x #15504Phalcon\Forms\Form when no entity is passed with isValid(), it uses the entity set in the form #15567Phalcon\Logger\Adapter\* to not allow serialization of the object. Added an exception when destroying the object while in transaction mode #15638Phalcon\Mvc\Model\Resultset\Complex::__construct now accepts Psr\SimpleCache\CacheInterface for the cachePhalcon\Mvc\Model\Resultset\Simple::__construct now accepts Psr\SimpleCache\CacheInterface for the cachePhalcon\Mvc\Model\Resultset::__construct now accepts Psr\SimpleCache\CacheInterface for the cachePhalcon\Mvc\Model\Resultset::getCache now returns Psr\SimpleCache\CacheInterface #15471Phalcon\Db\Adapter\AbstractAdapter:delete() signature of optional parameters. #15363bindCounts 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()Phalcon\Db\Adapter\AbstractAdapter:delete() when bindTypes argument is passed. #15363Phalcon\Storage\Adapter\Redis::getAdapter to use passed connectionTimeout, retryInterval and readTimeout options for the connection #15484Phalcon\Mvc\View\Engine\Volt\Compiler for a use case when a block will return null vs an array for statementList in PHP 8 #15556Phalcon\Translate\Adapter\Gettext::setLocale signature to allow the category and an array of locales #14764Phalcon\Version is now moved to Phalcon\Support\Version
_getSpecialVersion and _getVersion have been removed (marked deprecated in v4)Phalcon\Debug and the Volt compiler have been adjusted #15422Phalcon\Debug is now moved to Phalcon\Support\Debug; CSS/JS references updated #14817Phalcon\Logger:
Phalcon\Logger\Item::getName to Phalcon\Logger\Item::getLevelNamePhalcon\Logger\Item::getType to Phalcon\Logger\Item::getLevelDateTimeImmutable on a per item basis - more accurate timingPhalcon\Logger to accept a DateTimeZone in the constructor%type% to %level% to align with the variables #15411Phalcon\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 #15411Phalcon\Support\Helper\Str\Interpolate #15411Phalcon\Mvc\Model\ManagerInterface:getRelationByAlias() return type from Relation|bool to RelationInterface|bool #15343Phalcon\Paginator\Repository:getItems() return type from array to ResultsetInterface #15074BINARY and VARBINARY support for Phalcon\Db\Adapter\Mysql #14927Phalcon\Db\Profiler\Item::getTotalElapsedNanoseconds() and Phalcon\Db\Profiler\Item::getTotalElapsedMilliseconds() for more precision #15249Phalcon\Http\Response\Cookies::isSent() and Phalcon\Http\Response\Headers::isSent(); Added logic to not send the headers or cookies twice. #15334Phalcon\Validation\Validator\File\AbstractFile::checkIsUploadedFile() method to allow overriding when adding files to the $_FILES array directly (not uploading). #15051Phalcon\Support\Helper\Str\Interpolate to be used throughout the code for interpolation (Logger/Translator) %type% to %level% to align with the variables #15411Phalcon\Support\HelperFactory for an easier creation/access of helpers #15411Phalcon\Db\Profiler\Item calculation for seconds #15249Phalcon\Http\Message\ServerRequestFactory to populate with superglobals #15286Phalcon\Mvc\Model\Query\BuilderInterface::orderBy to use var instead of string #15415Phalcon\Db\Adapter\Pdo\AbstractPdo::connect to take into account the persistent option for relevant connections #15241Phalcon\Image\Adapter\Gd::processText to correctly call imagettfbbox when a font is specified #15188Phalcon\Cache to cast keys as strings before sending them to adapters #15249Logger\Log::log() log to recognize all log levels #15214setClaims to be protected so that the Phalcon\Security\JWT\Builder class can be properly extended. #15322Phalcon\Mvc\Model::average() to return float value when is string #15287Phalcon\Storage\Serializer\Igbinary to store is_numeric and bool values properly #15240Phalcon\Validation\Validator\Confirmation was failing to compare cases such as 000123 = 123 #15347Phalcon\Storage\Adapter failing to retrieve empty like stored data (such as [], 0, false) 15125function getEventsManager() to allow null return 15010Phalcon\Flash\Session::has() to properly check if any messages are existing 15204Phalcon\Forms\Element\Select::__construct()Phalcon\Assets\Manager::addCss()Phalcon\Assets\Manager::addJs()Phalcon\Db\Adapter\AdapterInterface::execute(), Phalcon\Db\Adapter\AdapterInterface::fetchOne() and Phalcon\Db\Adapter\AdapterInterface::query()Phalcon\Annotations\Reader::parse() to return constants annotations #15919Phalcon\Annotations\Reflection::getConstantsAnnotations() method that returns constants annotations #15919Phalcon\Annotations\Adapter\AdapterInterface:
getConstant() method that returns class constant annotations collectiongetConstants() method that returns class constants annotations array list