github phalcon/cphalcon v5.14.0

5 hours ago

5.14.0 (2026-06-04)

Tools

  • Zephir Parser v2.0.2
  • Zephir 0.22.0 (development - 9d2def774)

Changed

  • Alignment with v6; docblocks; sorting; return types; minor fixes (image watermark opacity calc, serializer/helpers, readonly-becoming-mutable, ACL local access). #17055
  • Changed return types to -> <static> or -> <self> in various components. The change is a covariant narrowing on implementation methods and does not touch any interface contracts, so userland classes that implement Phalcon interfaces and return the interface type continue to work unchanged. #17035
  • Internal performance work across Autoload, Dispatcher, Annotations, Db, Mvc\Model, Mvc\Model\Query, Tag, Assets, Acl\Adapter\Memory, Http\Request, Encryption\Crypt. Behavior preserved. #17049
  • Moved CI tools/scripts in resources/ removed unused ones #17066
  • Moved docker in resources/ #17066
  • Refactored docker images (more flexible less cruft) #17066
  • Reorganization of quality tool config files (in resources/) #17066
  • Phalcon\Autoload\Loader getters (getDirectories, getExtensions, getFiles) return arrays keyed by the value string instead of by a SHA256 hash of it; iteration order and contents are unchanged. #17049 [doc]
  • Phalcon\Mvc\Router::handle() internal optimizations: O(1) hash lookup for literal-URI routes; per-HTTP-method buckets; hot-loop reads; PCRE patterns chunked; per-route metadata cache deduplicated by route id. #17012 [doc]
  • Phalcon\Mvc\Router\Route::getCompiledHostName() now uses cache for hostname/converters. #17012 [doc]

Added

  • Added a new dependency-injection container under Phalcon\Container, with its contracts under Phalcon\Contracts\Container. It adds:
    • Phalcon\Container\Container / Phalcon\Container\ContainerFactory - the container and its factory, configured through Phalcon\Contracts\Container\Service\Provider providers (Phalcon\Container\Provider\Web, Phalcon\Container\Provider\Cli).
    • Phalcon\Container\Definition\ServiceDefinition - fluent service definitions with autowiring, factories, extenders, tags, aliases, and configurable service lifetimes (Phalcon\Container\Definition\ServiceLifetime).
    • Phalcon\Container\Resolver\Resolver - reflection-based constructor / method / parameter autowiring, plus the Phalcon\Container\Resolver\Lazy\* family for lazy resolution (Get, GetCall, NewInstance, Call, Env, CsEnv, ArrayValues, etc.).
    • Phalcon\Container\Exceptions\* - granular, per-cause exceptions (ServiceNotFound, CircularAliasFound, FrozenDefinition, CannotResolveParameter, NoProcessorFound, etc.). #16897 [doc]
  • Added a new authentication and authorization layer under Phalcon\Auth, with its contracts under Phalcon\Contracts\Auth. Built on top of Phalcon\Container, it adds:
    • Phalcon\Auth\Manager / Phalcon\Auth\ManagerFactory - the central manager that wires guards and access gates together, and its factory.
    • Phalcon\Auth\AuthUser - a lightweight user value object returned by array-backed adapters when no application model class is configured.
    • Guards under Phalcon\Auth\Guard - Session and Token (with AbstractGuard and UserRemember), resolved via Phalcon\Auth\Guard\GuardLocator and configured through Phalcon\Auth\Guard\Config\* (AbstractGuardConfig, SessionGuardConfig, TokenGuardConfig).
    • Adapters under Phalcon\Auth\Adapter - Memory, Model, and Stream user providers (with AbstractAdapter and AbstractArrayAdapter), resolved via Phalcon\Auth\Adapter\AdapterLocator and configured through Phalcon\Auth\Adapter\Config\* (AbstractAdapterConfig, MemoryAdapterConfig, ModelAdapterConfig, StreamAdapterConfig).
    • Access gates under Phalcon\Auth\Access - Auth and Guest (with AbstractAccess), resolved via Phalcon\Auth\Access\AccessLocator.
    • Dispatcher listeners Phalcon\Auth\Mvc\AuthDispatcherListener and Phalcon\Auth\Cli\AuthDispatcherListener (with Phalcon\Auth\AbstractAuthDispatcherListener) to guard MVC and CLI dispatch.
    • Phalcon\Auth\Exception plus granular Phalcon\Auth\Exceptions\* (AccessDenied, ConfigRequiresNonEmptyValue, DataMustContainIdKey, DoesNotImplement, FileCannotRead, FileDoesNotContainJson, FileDoesNotExist, FileNotValidJson).
    • Contracts under Phalcon\Contracts\Auth - Manager, AuthUser, AuthRemember, RememberToken, Access\Access, Adapter\Adapter, Adapter\AdapterConfig, Adapter\RememberAdapter, Guard\Guard, Guard\GuardConfig, Guard\GuardStateful, Guard\BasicAuth.
    • Phalcon\Support\AbstractLocator - the shared service-locator base extended by the guard, adapter, and access locators. #16273 [doc]
  • Added granular exception classes across the framework. Every namespace that previously surfaced failures through a single umbrella Phalcon\<Namespace>\Exception (or its sub-namespace counterpart) now ships per-cause classes under a sibling Exceptions/ folder. Each new class extends the existing per-namespace parent so catch (Phalcon\<Namespace>\Exception $e) continues to work unchanged. New classes:
    • Phalcon\Acl\Exceptions
      • AccessRuleNotFound
      • CircularInheritanceError
      • ElementNotFound
      • ForbiddenWildcard
      • InvalidAccessList
      • InvalidComponentImplementation
      • InvalidRoleImplementation
      • InvalidRoleType
      • MissingFunctionParameters
      • ParameterTypeMismatch
      • RoleNotFoundException
    • Phalcon\Annotations\Exceptions
      • AnnotationNotFound
      • AnnotationsDirectoryNotWritable
      • CannotReadAnnotationData
      • UnknownAnnotationExpression
    • Phalcon\Application\Exceptions
      • ModuleNotRegistered
    • Phalcon\Assets\Exceptions
      • AssetSourceTargetCollision
      • CannotReadAsset
      • CollectionNotFound
      • InvalidAssetSourcePath
      • InvalidAssetTargetPath
      • InvalidFilter
      • InvalidTargetPath
      • TargetPathIsDirectory
    • Phalcon\Autoload\Exceptions
      • LoaderDirectoriesNotArray
      • LoaderMethodNotCallable
    • Phalcon\Cache\Exception
      • CacheKeysNotIterable
      • InvalidCacheKey
    • Phalcon\Cli\Console\Exceptions
      • ConsoleModuleNotRegistered
      • ContainerRequired
      • InvalidModuleDefinitionPath
      • ModuleDefinitionPathNotFound
    • Phalcon\Cli\Router\Exceptions
      • BeforeMatchNotCallable
      • InvalidRoutePaths
      • RouterArgumentsInvalidType
    • Phalcon\Config\Exceptions
      • CannotLoadConfigFile
      • ConfigNotArrayOrObject
      • GroupedAdapterRequiresArray
      • InvalidMergeData
      • MissingConfigOption
      • MissingFileExtension
      • MissingYamlExtension
    • Phalcon\DataMapper\Pdo\Exception
      • DriverNotSupported
      • UnknownDriverMethod
      • UnknownQueryMethod
    • Phalcon\Db\Exceptions
      • CannotInsertWithoutData
      • CannotPrepareStatement
      • CheckExpressionRequired
      • ColumnTypeRejectsAutoIncrement
      • ColumnTypeRejectsScale
      • ColumnTypeRequired
      • ConflictTargetColumnRequired
      • ConflictUpdateColumnRequired
      • ForeignKeyColumnsRequired
      • GeneratedAutoIncrementConflict
      • GeneratedDefaultConflict
      • IncompleteBindTypes
      • InvalidBindParameter
      • InvalidCheckExpression
      • InvalidGenerationExpression
      • InvalidGroupByExpression
      • InvalidIndexColumns
      • InvalidIndexDirections
      • InvalidIndexWhere
      • InvalidListExpression
      • InvalidOrderByExpression
      • InvalidSqlExpression
      • InvalidSqlExpressionType
      • InvalidUnaryExpression
      • InvalidWhereConditions
      • MatchedParameterNotFound
      • MaterializedViewsNotSupported
      • MissingDefinitionKey
      • MissingForeignKeyChecks
      • MissingSqliteDatabase
      • MysqlOnConflictNotSupported
      • NestedTransactionChangeBlocked
      • NoActiveTransaction
      • ReferencedColumnCountMismatch
      • ReferencedColumnsRequired
      • ReferencedTableRequired
      • ReturningNotSupported
      • ReturningRequiresColumn
      • SavepointsNotSupported
      • SqliteAlterCheckNotSupported
      • SqliteAlterColumnNotSupported
      • SqliteAlterForeignKeyNotSupported
      • SqliteAlterPrimaryKeyNotSupported
      • SqliteDropCheckNotSupported
      • SqliteDropForeignKeyNotSupported
      • SqliteDropPrimaryKeyNotSupported
      • TableMustHaveColumn
      • UnrecognizedDataType
      • UpdateFieldCountMismatch
    • Phalcon\Di\Exceptions
      • AliasAlreadyInUse
      • AliasNameMustBeString
      • ArgumentTypeRequired
      • CallArgumentsMustBeArray
      • CircularAliasReference
      • ContainerRequired
      • DefinitionMustBeArrayForRead
      • DefinitionMustBeArrayForUpdate
      • MethodCallMustBeArray
      • MethodNameRequired
      • MissingClassNameParameter
      • MissingParameterKey
      • PropertyInjectionRequiresInstance
      • PropertyMustBeArray
      • PropertyNameRequired
      • PropertyValueRequired
      • ServiceCannotBeResolved
      • SetterInjectionRequiresInstance
      • SetterParametersMustBeArray
      • UnknownServiceType
    • Phalcon\Dispatcher\Exceptions
      • ForwardInInitializeForbidden
    • Phalcon\Encryption\Crypt\Exception
      • DecryptionFailed
      • EmptyDecryptionKey
      • EmptyEncryptionKey
      • EncryptionFailed
      • InvalidPaddingSize
      • IvLengthCalculationFailed
      • MissingAuthData
      • MissingOpensslExtension
      • RandomBytesGenerationFailed
      • UnsupportedAlgorithm
    • Phalcon\Encryption\Security\Exceptions
      • InvalidRandomInput
      • UnknownHashAlgorithm
    • Phalcon\Encryption\Security\JWT\Exceptions
      • EmptyPassphrase
      • InvalidAudience
      • InvalidAudienceType
      • InvalidClaims
      • InvalidExpirationTime
      • InvalidHeader
      • InvalidNotBefore
      • MalformedJwtString
      • MissingJwtTypHeader
      • UnsupportedHmacAlgorithm
      • WeakPassphrase
    • Phalcon\Events\Exceptions
      • EventNotCancelable
      • InvalidEventHandler
      • InvalidEventSource
      • InvalidEventType
      • InvalidSubscriberConfiguration
      • NoListenersForEvent
    • Phalcon\Filter\Exceptions
      • FilterNotRegistered
    • Phalcon\Filter\Validation\Exceptions
      • FieldNotPrintable
      • FilterServiceUnavailable
      • InvalidAllowedTypes
      • InvalidCallbackReturn
      • InvalidDomainOption
      • InvalidFieldType
      • InvalidFilterService
      • InvalidStrictOption
      • InvalidValidationData
      • InvalidValidator
      • InvalidValidatorScope
      • MissingMbstring
      • NoDataToValidate
      • NoValidators
      • NoValidatorsInComposite
      • UniquenessConversionMustBeArray
      • UniquenessModelRequired
      • UniquenessOnlyForPhalconModel
      • ValidationEntityNotObject
    • Phalcon\Flash\Exceptions
      • EscaperServiceUnavailable
      • FlashMessageNotStringOrArray
      • SessionServiceUnavailable
    • Phalcon\Forms\Exceptions
      • ElementNotInForm
      • FormElementNameRequired
      • FormNotInLocator
      • FormNotRegistered
      • InvalidEntity
      • InvalidFilterType
      • InvalidJsonSchema
      • JsonSchemaNotArray
      • NoFormElements
      • SchemaEntryMissingKey
      • SchemaEntryNotArray
      • UnknownFormElementType
      • YamlExtensionRequired
      • YamlSchemaNotArray
    • Phalcon\Html\Exceptions
      • AttributeNotRenderable
      • FriendlyTitleConversionFailed
      • InvalidResultsetValue
      • ServiceNotRegistered
      • UsingRequiresTwoValues
    • Phalcon\Http\Cookie\Exceptions
      • CookieKeyTooShort
      • CryptInterfaceRequired
      • CryptServiceUnavailable
      • FilterServiceUnavailable
    • Phalcon\Http\Request\Exceptions
      • FilterServiceUnavailable
      • InvalidHost
      • InvalidHttpMethod
      • MissingFilters
      • SanitizerNotFound
    • Phalcon\Http\Response\Exceptions
      • NonStandardStatusCodeRequiresMessage
      • ResponseAlreadySent
      • ResponseServiceUnavailable
      • UrlServiceUnavailable
    • Phalcon\Image\Exceptions
      • CompositeFailed
      • ExtensionNotLoaded
      • ImageLoadFailed
      • MissingDimensions
      • MissingHeight
      • MissingWidth
      • ResizeFailed
      • ResourceTypeError
      • TextRenderingFailed
      • UnsupportedImageType
      • VersionMismatch
    • Phalcon\Logger\Adapter\Exceptions
      • FileOpenFailed
      • InvalidStreamMode
      • SyslogOpenFailed
    • Phalcon\Logger\Exceptions
      • AdapterNotFound
      • DeserializationFailed
      • NoAdaptersConfigured
      • SerializationFailed
      • TransactionAlreadyActive
      • TransactionNotActive
    • Phalcon\Messages\Exceptions
      • MessageNotObject
      • MessagesNotIterable
    • Phalcon\Mvc\Application\Exceptions
      • ContainerRequired
      • InvalidModuleDefinition
      • ModuleDefinitionPathNotFound
    • Phalcon\Mvc\Dispatcher\Exceptions
      • ResponseServiceUnavailable
    • Phalcon\Mvc\Micro\Exceptions
      • ContainerRequired
      • ErrorHandlerNotCallable
      • HandlerNotCallable
      • InvalidRegisteredHandler
      • LazyHandlerNotFound
      • MissingCollectionMainHandler
      • NoHandlersToMount
      • NoMatchedRouteHandler
      • NotFoundHandlerNotCallable
      • ResponseHandlerNotCallable
    • Phalcon\Mvc\Model\Behavior\Exceptions
      • MissingRequiredOption
    • Phalcon\Mvc\Model\Exceptions
      • BelongsToRequiresObject
      • BindTypeNotDefined
      • CannotResolveAttribute
      • ColumnNotInMap
      • ColumnNotInTableColumns
      • ColumnNotInTableMap
      • CorruptColumnType
      • CursorIsImmutable
      • DataTypeNotDefined
      • HandlerMustImplementBindable
      • IdentityNotInColumnMap
      • IdentityNotInTableColumns
      • IndexNotInCursor
      • IndexNotInRow
      • InvalidConnectionService
      • InvalidContainer
      • InvalidDumpResultKey
      • InvalidFindParameters
      • InvalidGetModelNameReturn
      • InvalidModelName
      • InvalidModelsManagerService
      • InvalidModelsMetadataService
      • InvalidResultsetCacheService
      • InvalidReturnedRecord
      • InvalidSerializationData
      • ManagerOrmServicesUnavailable
      • MethodNotFound
      • MissingMethodName
      • MissingModelClassName
      • ModelCouldNotLoad
      • ModelOrmServicesUnavailable
      • PrimaryKeyAttributeNotSet
      • PrimaryKeyRequired
      • PropertyNotAccessible
      • RecordCannotRefresh
      • RecordNotPersisted
      • ReferencedFieldsMismatch
      • RelationAliasMustBeString
      • RelationNotDefined
      • RelationRequiresObjectOrArray
      • ResultsetColumnNotInMap
      • RowIsImmutable
      • SnapshotsDisabled
      • StaticMethodRequiresOneArgument
      • UnknownRelationType
      • UpdateSnapshotDisabled
    • Phalcon\Mvc\Model\MetaData\Exceptions
      • CannotObtainTableColumns
      • ColumnMapNotArray
      • ContainerRequired
      • CorruptedMetaData
      • InvalidContainer
      • InvalidMetaDataForModel
      • MetaDataDirectoryNotWritable
      • MetaDataStrategyFailed
      • NoAnnotationsForClass
      • NoPropertyAnnotationsForClass
      • TableNotInDatabase
    • Phalcon\Mvc\Model\Query\Exceptions
      • AmbiguousColumn
      • AmbiguousJoinRelation
      • BindParameterNotInPlaceholders
      • BindTypeRequiresArray
      • BindValueRequired
      • ColumnNotInDomain
      • ColumnNotInSelectedModels
      • CorruptedAst
      • CorruptedDeleteAst
      • CorruptedInsertAst
      • CorruptedSelectAst
      • CorruptedUpdateAst
      • DeleteMultipleNotSupported
      • DuplicateAlias
      • EmptyArrayPlaceholderValue
      • InsertColumnCountMismatch
      • InvalidCachedResultset
      • InvalidCachingOptions
      • InvalidColumnDefinition
      • InvalidInjectedManager
      • InvalidInjectedMetadata
      • InvalidQueryCacheService
      • InvalidResultsetClass
      • JoinAliasAlreadyUsed
      • JoinFieldCountMismatch
      • MissingCacheKey
      • MissingMetaData
      • MissingModelAttribute
      • MissingModelsManager
      • MixedDatabaseSystems
      • ModelSourceNotFound
      • ModelsListNotLoaded
      • MultipleSqlStatementsNotSupported
      • NoModelForAlias
      • PhqlColumnNotInMap
      • ReadConnectionMissing
      • RelationshipNotFound
      • ResultsetClassNotFound
      • ResultsetNonCacheable
      • UnknownBindType
      • UnknownColumnType
      • UnknownJoinType
      • UnknownModelOrAlias
      • UnknownPhqlExpression
      • UnknownPhqlExpressionType
      • UnknownPhqlStatement
      • UpdateMultipleNotSupported
      • WriteConnectionMissing
    • Phalcon\Mvc\Model\Query\Exceptions\Builder
      • BuilderColumnNotInMap
      • BuilderConditionInvalid
      • ModelRequired
      • NoPrimaryKey
      • OperatorNotAvailable
    • Phalcon\Mvc\Router\Exceptions
      • AnnotationsServiceUnavailable
      • BeforeMatchNotCallable
      • ConfigKeyMustBeArray
      • EmptyGroupOfRoutes
      • GroupRoutesMustBeArray
      • InvalidCallbackParameter
      • InvalidConfigSource
      • InvalidNotFoundPaths
      • InvalidRoutePaths
      • InvalidRoutePosition
      • InvalidRouterFactoryConfig
      • MissingGroupRouteKey
      • MissingRouteConfigKey
      • RequestServiceUnavailable
      • UnknownHttpMethod
      • WrongPathsKey
    • Phalcon\Mvc\Url\Exceptions
      • MissingRouteName
      • RouteNotFound
      • RouterServiceUnavailable
    • Phalcon\Mvc\View\Engine\Volt\Exceptions
      • CannotOpenCompiledFile
      • CorruptedStatement
      • CorruptedStatementWithData
      • InvalidCompilationPrefix
      • InvalidExtension
      • InvalidHaystack
      • InvalidIntermediateRepresentation
      • InvalidOptionType
      • InvalidPathClosureReturn
      • InvalidPathType
      • InvalidStatement
      • InvalidUserFilterDefinition
      • InvalidUserFunctionDefinition
      • MacroAlreadyDefined
      • MacroNotFound
      • MbstringRequired
      • TemplateFileNotFound
      • TemplateFileNotOpenable
      • TemplatePathCollision
      • UnknownVoltExpression
      • UnknownVoltFilter
      • UnknownVoltFilterType
      • UnknownVoltStatement
      • VoltDirectoryNotWritable
    • Phalcon\Mvc\View\Exceptions
      • InvalidEngineRegistration
      • InvalidViewsDirType
      • SimpleViewNotFound
      • SimpleViewServicesUnavailable
      • ViewNotFound
      • ViewServicesUnavailable
      • ViewsDirItemMustBeString
    • Phalcon\Paginator\Exceptions
      • BuilderModelNotDefined
      • InvalidBuilderInstance
      • InvalidCursorColumn
      • InvalidLimit
      • MissingColumnsForHaving
      • MissingRequiredParameter
      • PaginatorDataNotArray
    • Phalcon\Session\Adapter\Exceptions
      • AdapterRuntimeError
      • InvalidSavePath
      • SavePathUnavailable
    • Phalcon\Session\Exceptions
      • InvalidSessionAdapter
      • InvalidSessionName
      • SessionAlreadyStarted
      • SessionModificationDenied
    • Phalcon\Storage\Exceptions
      • AuthenticationFailed
      • ClusterConnectionFailed
      • ConnectionFailed
      • DatabaseSelectionFailed
      • InvalidConfiguration
      • StorageError
    • Phalcon\Storage\Serializer\Exceptions
      • InvalidSerializationInput
      • InvalidUnserializationInput
    • Phalcon\Support\Collection\Exceptions
      • InvalidValueType
      • ReadOnlyViolation
    • Phalcon\Support\Debug\Exceptions
      • RequestHalted
      • RuntimeWarning
    • Phalcon\Support\Helper\Json\Exceptions
      • JsonDecodeError
      • JsonEncodeError
    • Phalcon\Support\Helper\Str\Exceptions
      • InsufficientArguments
      • InvalidReplaceFormat
      • SyntaxError
    • Phalcon\Time\Clock\Exceptions
      • InvalidModifier
    • Phalcon\Translate\Exceptions
      • FileOpenError
      • ImmutableObject
      • InterpolatorNotRegistered
      • InvalidDataType
      • KeyNotFound
      • MissingContent
      • MissingGettextExtension
      • MissingRequiredParameter
      • TranslatorNotRegistered #17019
  • Added Phalcon\Events\Manager::fire() beforeFire() / afterFire() extension seams to Manager::fire(). #17065 [doc]
  • Added opt-in memory caps for long-running workers (Swoole / RoadRunner / queue consumers). Default 0 preserves the original unbounded behavior: #17049
    • Phalcon\Db\Profiler::setMaxProfiles(int) / getMaxProfiles() [doc]
    • Phalcon\Logger\Adapter\AbstractAdapter::setQueueLimit(int) / getQueueLimit() [doc]
    • Phalcon\Events\Manager::setMethodExistsCacheLimit(int) / getMethodExistsCacheLimit() [doc]
    • Phalcon\Annotations\Adapter\AbstractAdapter::setAnnotationsLimit(int) / getAnnotationsLimit() [doc]
    • Phalcon\Storage\Adapter\Memory::setMaxItems(int) / getMaxItems() [doc]
  • Added Phalcon\Mvc\Router\Route::setRouteId(string $routeId) - setter intended for restoring cached routes #17012 [doc]
  • Added Phalcon\Mvc\Router::buildDispatcherDump() / Phalcon\Mvc\Router::loadDispatcherFromArray(array $dump) - used to build/load the routes #17012 [doc]
  • Added Phalcon\Mvc\Router::dumpDispatcher(string $path) / Phalcon\Mvc\Router::loadDispatcher(string $path) - file-shaped helpers that write/read routes #17012 [doc]
  • Added Phalcon\Mvc\Router::useCache() - to use a Phalcon\Cache adapter to store routes #17012 [doc]

Fixed

  • Fixed $this->eventsManager resolving to null inside Phalcon\Mvc\Controller methods #17060 [doc]
  • Fixed Phalcon\Events\Event and Phalcon\Events\Manager::fire() being declared final in 5.13.0 (#17006), which prevented subclassing the events manager. #17065 [doc]
  • Fixed Phalcon\Forms\Form::clear() leaving a previously-bound null field value in the data array instead of unsetting it before reassigning the element default #17042 [doc]
  • Fixed Phalcon\Mvc\Model::getChangedFields() / hasChanged() flagging every null-valued column of a freshly-loaded row as changed #17042 [doc]
  • Fixed Phalcon\Mvc\Model::getUpdatedFields() flagging unchanged null-valued columns as updated #17042 [doc]
  • Fixed Phalcon\Mvc\Model\Row::offsetGet() / offsetExists() throwing The index does not exist in the row when accessing a column whose value is null #17041 [doc]
  • Fixed Phalcon\Mvc\Router::handle() falling back to a default catch-all route instead of matching an HTTP-method-constrained route attached afterward. #17062 [doc]
  • Fixed Phalcon\Mvc\View::getContent() throwing TypeError after View::start(). start() was assigning $this->content = null #17041 [doc]
  • Fixed Phalcon\Mvc\View\Engine\Volt\Compiler emitting invalid PHP when a double-quoted Volt string contained literal single quotes (e.g. "send_ga('Link', ...)"). Only un-escaped single quotes are now escaped, so the 'Let\'s Encrypt' case from #17002 is preserved #17046 [doc]
  • Fixed warning in Phalcon\Auth\ManagerFactory emitted in tests (random commit but had to be fixed) #17066

Removed

  • Removed unused Phalcon\Contracts\Container\Service\Lifetime #17066
  • Reverted the Phalcon\Mvc\Model\Query::executeUpdate() named-placeholder substitution introduced for #16976. The substitution path was triggering a use-after-free in the model update flow under PostgreSQL (#17042). Issue #16976 is reopened and will be addressed with a different approach. [doc]

Don't miss a new cphalcon release

NewReleases is sending notifications on new releases.