Phalcon v4.1.0 Release Notes

Release Date: 2020-10-31 // 12 months ago
  • ๐Ÿ‘Œ Supported PHP Versions: 7.2, 7.3, 7.4

    โž• Added

    • โž• Added JWT (JSON Web Tokens) support under Phalcon\Security\JWT. Offers support for:
      • Token
      • Parser
      • Builder
      • Validator
      • Signers (None, HMAC)
      • Base64 encode/decodeUrl helper class
        #13856
    • โž• Added additional HTML helpers under Phalcon\Html\Helper: Anchor, Base, Body, Button, Close, Element, Form, Img, Input\Color, Input\Date, Input\DateTime, Input\DateTimeLocal, Input\Email, Input\File, Input\Hidden, Input\Image, Input\Input, Input\Month, Input\Numeric, Input\Password, Input\Range, Input\Select, Input\Search, Input\Submit, Input\Tel, Input\Text, Input\Textarea, Input\Time, Input\Url, Input\Week, Label, Link, Meta, Ol, Script, Style, Title, Ul
      #14696
    • โž• Added Phalcon\Http\Request::getPreferredIsoLocaleVariant() to return the base language if this is a specific one (en vs en-US) #3135
    • โž• Added preload for Volt, which will send a HTTP/2 preload header #13128
    • โž• Added Phalcon\Helper\Arr::blackList() to exclude elements of an array by the keys obtained from the elements of a blacklist #14801 @TimurFlush
    • โž• Added Phalcon\Debug::renderHtml() to get a HTML representation of the exception #14794 @TimurFlush
    • โž• Added Phalcon\Mvc\Router\Annotations->setActionPreformatCallback($callback) to set a callback which pre-formats actions to custom pattern #14819
    • โž• Added new PDO wrapper for the Data Mapper implementation, with decorated instance, locator and profiler
      • Phalcon\DataMapper\Pdo\Connection
      • Phalcon\DataMapper\Pdo\Connection\Decorated
      • Phalcon\DataMapper\Pdo\Profiler\Profiler
      • Phalcon\DataMapper\Pdo\Profiler\MemoryLogger
      • Phalcon\DataMapper\Pdo\ConnectionLocator
        This component will be used in the Data Mapper implementation but can be used as a stand alone component for PDO connections. #14733
    • โž• Added new Query Builder, as well as a factory, for the Data Mapper implementation supporting CRUD with bound parameters
      • Phalcon\DataMapper\Query\Bind
      • Phalcon\DataMapper\Query\Delete
      • Phalcon\DataMapper\Query\Insert
      • Phalcon\DataMapper\Query\Select
      • Phalcon\DataMapper\Query\Update
      • Phalcon\DataMapper\Query\QueryFactory
        ๐Ÿ— This component can be used to create SQL statements using a fluent interface. Optionally the statements can be executed from the builder itself using the DataMapper\Pdo connection. #14734
    • โž• Added Phalcon\Mvc\Micro\LazyLoader::getHandler() to return real handler when using lazy loaded controllers for Phalcon\Mvc\Micro #14871 @Jurigag
    • โž• Added Phalcon\Collection\CollectionInterface and Phalcon\Config\ConfigInterface to use as typehints when extending or implementing custom classes #15106 @BeMySlaveDarlin
    • โž• Added Phalcon\Db\Adapter\AdapterInterface::getDefaultValue() and supportsDefaultValue() methods to properly support the DEFAULT keyword #15180
    • โž• Added Phalcon\Db\Adapter\AbstractAdapter::supportsDefaultValue() method to properly support the DEFAULT keyword #15180

    ๐Ÿ”„ Changed

    • โž• Added service checks for the session. Now cookies will be saved in the session only when the session service is defined #11770, #14649
    • ๐Ÿ”„ Changed Phalcon\Db\Adapter\*::getRawSQLStatement() to return the full SQL query with parameters #12196
    • ๐Ÿ‘‰ Changed Phalcon\Filter::sanitize to throw a E_USER_NOTICE when a filter does not exist. #14679
    • ๐Ÿ–จ PHQL now supports the use of any printable characters from the extended ASCII table for escaped identifiers. The exception characters are [ and ]. To use [ and ] escape they (\[, \]) #14535
    • โœ‚ Removed UTF-8 charset when using Phalcon\Http\Response::setJsonContent to apply with rfc7159
    • ๐Ÿ”„ Changed the visibility of properties in Phalcon\Http\Message\Uri to work with clone. #15040
    • ๐Ÿ”„ Change Phalcon\Validation\AbstractValidator::__construct. Save custom validator message in options. #15053 @ivan-zolotavin
    • โž• Add proxy methods without _ prefix in methods names: getRelatedRecords(), groupResult(), exists(), preSaveRelatedRecords(), preSave(), doLowUpdate(), postSaveRelatedRecords(), postSave(), cancelOperation(), doLowInsert(), getConnection(), getConnectionService(), getVersion(), getSpecial() #14971
    • Modified Phalcon\Mvc\Model\Relation to accept callable params for model relations. #15158

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed Phalcon\Db\Dialect\Mysql::getColumnDefinition to recognize size for DATETIME, TIME and TIMESTAMP columns #13297
    • ๐Ÿ›  Fixed Phalcon\Events\Manager to provide callable support #13322, #15045
    • ๐Ÿ›  Fixed Phalcon\Validation\Validator\Uniqueness fixed except query #15084
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model to also check the params option in cascade relations when deleting #15098
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model to also check the params option in restricted relations when deleting #15172
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model::findFirst() to return correct value #15077
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model\CriteriaInterface::where() parameters #15144
    • ๐Ÿ›  Fixed Phalcon\Http\Response\Cookies::set() to utilize the options parameter correctly #15129
    • ๐Ÿ›  Fixed Phalcon\Http\Cookie::send() to define options parameter #15142
    • ๐Ÿ›  Fixed Phalcon\Crypt performance issues. #15118
    • ๐Ÿ›  Fixed Phalcon\Mvc\Router\Route unicode support in patterns #15102
    • Fixed fatal error in Phalcon\Mvc\Model::cloneResultMap() when column map is used with orm.cast_on_hydrate turned on. #14617
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model::sum(), average(), minimum(), maxmium(), count() to utilize the transaction parameter. #15113
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model::__set() to clear dirtyRelated when empty array is set. #14822
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model to skip columns with default values when the DEFAULT keyword is not supported by the database adapter (SQLite) #15180
    • ๐Ÿ›  Fixed Phalcon\Mvc\Router to handle numeric routes properly #14926
    • ๐Ÿ›  Fixed Phalcon\Session\Adapter\Redis and Phalcon\Session\Adapter\Libmemcached to utilize the prefix option #15184
    • ๐Ÿ›  Fixed Phalcon\Mvc\Model to save the modified properties of previously queried single related records. #15148

    โœ‚ Removed

    • โœ‚ Removed Phalcon\Http\Cookie binding to session #11770
      • Phalcon\Http\Cookie no longer depends on the session service and data will not be duplicated in the session. This made it difficult to use cookies in stateless applications (SPA).
    • โœ‚ Removed unused property Phalcon\Mvc\Router::uriSource. #15123

Previous changes from v4.0.6

  • ๐Ÿ‘Œ Supported PHP Versions: 7.2, 7.3, 7.4

    ๐Ÿ”„ Changed

    • ๐Ÿ”„ Changed Volt::convertEncoding to no longer using iconv for a fallback since it causes issues with macOS #14912
    • ๐Ÿ”„ Changed schema manipulation in Phalcon\Db\Dialect\Mysql - unquote numerical defaults #14888, #14974
    • ๐Ÿ”„ Changed the default ACL access level from boolean FALSE to Enum::DENY #14974
    • ๐Ÿ”„ Changed the way Phalcon\Http\Response::__construct checks content data type. Now a TypeError will be thrown if incompatible data type was passed #14983
    • ๐Ÿ”„ Changed return type hints of the following Phalcon\Flash\FlashInterface's methods: error, message, notice, success and warning #14994
    • ๐Ÿ”„ Changed return type hint for Phalcon\Mvc\ModelInterface::sum #15000
    • ๐Ÿ”„ Changed return type for Phalcon\Mvc\Model\Criteria::getLimit so that integer, NULL or array will be returned #15004
    • ๐Ÿ”„ Changed return type hint for Phalcon\Mvc\Model\Manager::getCustomEventsManager to return NULL instead of boolean FALSE if there is no special events manager #15008
    • ๐Ÿ“‡ Changed Phalcon\Mvc\Model\MetaData::getDI so that now it will throw a Phalcon\Mvc\Model\Exception if there is no DiInterface instance #15011
    • ๐Ÿ”„ Changed Phalcon\Http\Request::getJsonRawBody to use json_decode instead of Phalcon\Json::decode #14936
    • ๐Ÿ”„ Changed Phalcon\Factory\AbstractFactory to expose getService which will throw an exception if it does not exist. Removed checkService and adjusted all references in newInstance() calls. #15038
    • ๐Ÿ”„ Changed the visibility of methods and properties in Phalcon\Http\Message\Response, Phalcon\Http\Message\ServerRequest and Phalcon\Http\Message\Uri to work with clone. #15040

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed Phalcon\Mvc\Model\Query\Builder::getPhql to add single quote between string value on a simple condition #14874
    • ๐Ÿ›  Fixed recognizing language operators inside Volt's echo mode ({{ ... }}) #14476
    • ๐Ÿ›  Fixed Tag::friendlyTitle to correctly convert titles under MacOS and Windows #14866
    • ๐Ÿ›  Fixed the Volt compiler to no longer parse cache fragments and thus searching for the viewCache service (deprecated for v4) #14907
    • ๐Ÿ›  Fixed IN operator precedence in Volt #14816
    • ๐Ÿ›  Fixed testing suite to work with PHPUnit 9 when we upgrade #14837
    • ๐Ÿ›  Fixed return type hints of the following Phalcon\Acl\AbstractAdapter's methods: getActiveAccess, getActiveRole and getActiveComponent #14974
    • ๐Ÿ›  Fixed default value of the following Phalcon\Annotations\Annotation's properties: $arguments and $exprArguments #14977
    • ๐Ÿ›  Fixed return type hints of the following Phalcon\Annotations\Annotation's methods: getArgument, getName and getNamedArgument #14977
    • ๐Ÿ›  Fixed incorrect return type hint for Phalcon\Http\Response\Cookies::setSignKey #14982
    • ๐Ÿ›  Fixed return type hints for Phalcon\Config\ConfigFactory::load and Phalcon\Config\ConfigFactory::newInstance to explicitly indicate the return type as Phalcon\Config instance #14978
    • ๐Ÿ›  Fixed return type hints for the following methods #14987:
      • Phalcon\Dispatcher\AbstractDispatcher::dispatch
      • Phalcon\Dispatcher\DispatcherInterface::dispatch
      • Phalcon\Filter::get
      • Phalcon\Http\Message\AbstractCommon::cloneInstance
      • Phalcon\Http\Message\AbstractCommon::processWith
      • Phalcon\Http\Message\AbstractMessage::withAddedHeader
      • Phalcon\Http\Message\AbstractMessage::withBody
      • Phalcon\Http\Message\AbstractMessage::withHeader
      • Phalcon\Http\Message\AbstractMessage::withProtocolVersion
      • Phalcon\Http\Message\AbstractMessage::withoutHeader
      • Phalcon\Http\Message\AbstractRequest::withMethod
      • Phalcon\Http\Message\AbstractRequest::withRequestTarget
      • Phalcon\Http\Message\AbstractRequest::withUri
      • Phalcon\Mvc\Model\Binder::findBoundModel
      • Phalcon\Validation::getEntity
      • Phalcon\Validation\ValidationInterface::getEntity
    • ๐Ÿ›  Fixed default value of Phalcon\Crypt::$key to satisfy the interface #14989
    • ๐Ÿ›  Fixed return type hint for Phalcon\Di::getInternalEventsManager #14992
    • ๐Ÿ›  Fixed return type hints of the following Phalcon\Flash\AbstractFlash's methods: error, notice, success and warning #14994
    • ๐Ÿ›  Fixed return type hint for Phalcon\Translate\InterpolatorFactory::newInstance #14996
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model::sum #15000
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model\CriteriaInterface::getLimit and Phalcon\Mvc\Model\Criteria::getLimit to follow documentation and original purpose #15004
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model::count and Phalcon\Mvc\ModelInterface::count to reflect original behavior #15006
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model::getEventsManager to reflect original behavior #15008
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model::average and Phalcon\Mvc\ModelInterface::average to reflect original behavior #15013
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model\MetaData::getColumnMap and Phalcon\Mvc\Model\MetaData::getReverseColumnMap to reflect original behavior #15015
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model\MetaDataInterface::getColumnMap and Phalcon\Mvc\Model\MetaDataInterface::getReverseColumnMap to reflect original behavior #15015
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model\CriteriaInterface::getColumns and Phalcon\Mvc\Model\Criteria::getColumns to reflect original behavior #15017
    • ๐Ÿ›  Fixed return type hint for Phalcon\Db\Column::getSize and Phalcon\Db\ColumnInterface::getSize to reflect original behavior #15019
    • ๐Ÿ›  Fixed return type hint for Phalcon\Db\Column::getAfterPosition and Phalcon\Db\ColumnInterface::getAfterPosition to reflect original behavior #15021
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model\Manager::executeQuery and Phalcon\Mvc\Model\Manager::ManagerInterface to reflect original behavior #15024
    • ๐Ÿ›  Fixed return type hint for Phalcon\Mvc\Model\Resultset::getFirst and Phalcon\Mvc\Model\ResultsetInterface::getFirst to reflect original behavior #15027
    • โช Rollback the regression changes for Phalcon\Mvc\Model\Query::_prepareSelect to properly prepare a SQL SELECT statement from a PHQL one #14657
    • ๐Ÿ›  Fixed SerializerInterface usage for Phalcon\Mvc\Model\Resultset\Complex::unserialize as well as Phalcon\Mvc\Model\Resultset\Complex::unserialize #14942

    โœ‚ Removed

    • โœ‚ Removed Phalcon\Translate\InterpolatorFactory::$mapper as well as Phalcon\Translate\InterpolatorFactory::$services in favor of Phalcon\Factory\AbstractFactory ones #15036