Changelog
11.4.4, (2025-09-19)
Changes
- Prevent unnecessary warnings from PHPStan.
11.4.3, (2025-09-16)
Changes
- Moved ingress prefix logic to the router.
11.4.2, (2025-09-16)
New
- The request class can now strip a configurable ingress prefix from the request path.
11.3.1, 11.4.1 (2025-09-01)
Bugfixes
- Fixed issue with deleting records using an ORM object with the SensitiveStringTraittrait.
11.4.0 (2025-08-30)
New
- The container can now resolve parameters with the help of custom injector attributes. The following attributes are included by default:
- 
InjectConnectionwhich allows you to inject a specific database connection.
- 
InjectConnectionwhich allows you to inject a specific Redis connection.
- 
InjectConfigwhich allows you to inject a config value.
- 
InjectEnvwhich allows you to inject a environment variable value.
 
- 
- Added disableAfterSunsetoption to theDeprecatedmiddleware.
Changes
- Increased the default PBKDF2 key derivation iteration count in the OpenSSL encrypter to improve security. The default can be overridden using the key_derivation_iterationsconfiguration parameter.
Compatibility
- PHP 8.5 compatibility.
Deprecations
- Deprecated the CryptoManager::getEncrypter()method. Use theCryptoManager::getInstance()orCryptoManager::getCrypto()methods instead.
All deprecated features will be removed in Mako 12.0.
11.3.0 (2025-07-28)
New
- Added "insert and return" functionality to the query builder. The feature is currently supported by the Firebird,MariaDB,PostgreSQL,SQLiteandSQL Servercompilers.- 
Query::insertAndReturn()
- 
Query::insertMultipleAndReturn()
 
- 
- Added SensitiveStringtype to the database library. It can be used to encapsulate sensitive strings to prevent them from being logged in query logs.
Changes
- 
MariaDBnow has its own connection and query compiler classes that extend theMySQLclasses. Use themariadb:prefix in your connection dsn instead ofmysql:to take full advantage of theMariaDBfeatures.
- The ResultSet::getPagination()return type is now nullable.
11.2.1 (2025-05-26)
Improvements
- All the query builder aggregate methods now also allow a Rawinstance in addition to a column name.
- The Query::aggregate()method is now public.
11.2.0 (2025-03-24)
New
- The class finder can now find enums.
- Added a CLI output component that makes it easy to print a set of aligned labels and values.
- Reactor CLI commands can now prompt for missing arguments if they use the PromptForMissingArgumentsattribute.
- Added new methods to the CLI Inputclass:- 
Input::makeNonInteractive()
- 
Input::makeInteractive()
- 
Input::isInteractive()
 
- 
- Added global --non-interactivereactor argument.
- Added Environment::noColor()method.
- CLI output now respects the NO_COLORenvironment variable.
Changes
- The selectandconfirmCLI inputs are now interactive and more user friendly.
Deprecations
- Deprecated the Command::question()method. Use theCommand::input()method instead.
- Deprecated the Cursor::beginningOfLine()method. Use theCursor::moveToBeginningOfLine()method instead.
All deprecated features will be removed in Mako 12.0.
11.1.1 (2025-02-25)
Changes
- Loosen type accepted by Response::setBody().
11.1.0 (2025-02-19)
New
- Added a statistics utility class with the following methods:
- 
Statistics::mean()
- 
Statistics::median()
- 
Statistics::mode()
- 
Statistics::multimode()
- 
Statistics::midrange()
- 
Statistics::sampleVariance()
- 
Statistics::populationVariance()
- 
Statistics::sampleStandardDeviation()
- 
Statistics::populationStandardDeviation()
 
- 
- Added "update and return" functionality to the query builder. The feature is currently supported by the Firebird,PostgreSQL,SQLiteandSQL Servercompilers.
- HTTP exceptions can now provide response headers.
- Added a rate limiter library with support for APCuandRedisstores.
- Added a rate limiter HTTP middleware.
- Added Response::setCompressionHandler()method.
- Added Response::getCompressionHandler()method.
Changes
- Command argument aliases are now shown in a separate column.
Deprecations
- Deprecated the WinCache cache store.
All deprecated features will be removed in Mako 12.0.
11.0.2 (2025-01-17)
New
- Added RedisException::getStreamMetadata()method to assist in debugging of read errors.
10.0.12, 11.0.1 (2025-01-16)
Compatibility
- Replaced the deprecated SETEX and SETNX redis command calls with SET with the EX and NX options.
11.0.0 (2025-01-03)
The major version bump is due to upping the required PHP version from 8.1 to 8.4 and a several breaking changes. Most applications built using Mako 10 should run on Mako 11 with just a few simple adjustments.
New
- Mako applications are now better suited to run on application servers like FrankenPHP.
- The development error view now displays the Mako environment name.
- Added Connection::blob()method that allows you to easily fetch a blob column as a stream.
- Added Query::blob()method that allows you to easily fetch a blob column as a stream.
- The ManyToMany::unlink()andManyToMany::synchronize()methods now support junction attributes.
- Enums are now also supported when writing "raw" SQL.
- Added support for deletes with joins to the MySQL query compiler.
- The database library will use the new driver specific PDO sub-classes.
- Added upsert functionality to the query builder. The feature is currently supported by the MySQL,PostgreSQLandSQLitecompilers.
- The database library now allows you to bind stringable objects as query parameters.
- Added ConnectionManager::getOpenConnections()method.
- The Time::createFromTimestamp()andTimeImmutable::createFromTimestamp()methods now support microsecond precision.
- The Time::createFromFormat()andTimeImmutable::createFromFormat()methods now support microsecond precision.
- It is now possible to customize how JSON request bodies are decoded using the following methods:
- 
Body::setJsonMaxDepth()to set the maximum JSON nesting level.
- 
Body::setJsonFlags()to set the JSON decoding options.
 
- 
- The dependency injection container can now resolve intersection types.
- Added Deprecatedmiddleware that allows you to easily set theDeprecationandSunsetHTTP headers.
- Global constraints and middleware will now be listed and sorted by priority when using the app:routescommand.
- The Redis client now supports the following Redis Stack features:
- Bloom filter
- Cuckoo filter
- Count-min sketch
- JSON
- Redis query engine
- Auto-suggest
- T-digest
- Time series
- Top-k
 
- Added Redis::executeCommand()helper method that makes it possible to call commands not yet supported by the client.
- Added Permissionenum to make it easier to interact with file permissions.
- Added Permissionsclass that can be used to interact with a set ofPermissionenum instances.
- Added FileSystem::setPermissions()method that accepts an integer or aPermissionsinstance.
- Added FileSystem::hasPermissions()method that accepts an integer or aPermissionsinstance.
- Added FileSystem::getPermissions()method that returns aPermissionsinstance.
- Added FileSystem::isExecutable()method.
- Added FileSystem::clearCache()method.
- Added FileInfo::hasPermissions()method that accepts an integer or aPermissionsinstance.
- Added FileInfo::getPermissions()method that returns aPermissionsinstance.
- Reactor command names can now be registered with the CommandNameattribute.
- Reactor command descriptions can now be registered with the CommandDescriptionattribute.
- Reactor command arguments can now be registered with the CommandArgumentsattribute.
- Added new Cursorclass that makes it easier to control the CLI cursor.
- Added a signal handler to make it easier to handle async process control signals.
- Added a CLI spinner output component.
- Added a CLI hyperlink component.
- Added a CLI progress component.
- Added a CLI progress iterator component.
- New and improved look of rendered CLI tables.
- Added a simple way to defer small tasks until after the response has been sent to the client when using FastCGI.
Changes
- The gatekeeper Session::login()andSession::forceLogin()methods will now return aLoginStatusenum instance instead of a mix of boolean and integer values.
- Dropped support for underscore separated Redis method calls.
- Renamed the UUID::sequential()method toUUID::v4Sequential().
- Renamed the ErrorHandler::handle()method toErrorHandler::addHandler().
- Renamed the ErrorHandler::handler()method toErrorHandler::handle().
- Renamed the mako\cli\output\helpersnamespace tomako\cli\output\components.
- The Redis cache clearimplementation will no longer flush the entire database but instead just deleted the cached keys.
Deprecations
- Deprecated the Command::$commandproperty. Use theCommandNameattribute instead.
- Deprecated the Command::$descriptionproperty. Use theCommandDescriptionattribute instead.
- Deprecated the Command::getCommand()method.
- Deprecated the Command::getDescription()method.
- Deprecated the Command::getArguments()method. Use theCommandArgumentsattribute instead.
- Deprecated the Command::progressBar()method. Use theCommand::progress()orCommand::progressIterator()methods instead.
Improvements
- Text in CLI alerts can now be styled and the alerts will render properly with text consisting of characters of varying width.
- More consistent look and feel when creating CLI commands.
- The preloader generator will now ensure preloading of class, property, method and argument attributes.
- Various other improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
10.0.*.
All deprecated features will be removed in Mako 12.0.
10.0.11 (2024-12-18)
Compatibility
- PHP 8.4 compatibility.
10.0.10 (2024-08-25)
Bugfixes
9.1.6, 10.0.9 (2024-07-21)
Compatibility
- Ensuring compatibility with future PHP versions.
10.0.8 (2024-01-25)
Bugfixes
- The app:routescommand no longer fails when there is registered middleware.
- The Environment::getWidth()method now works as expected.
- The Environment::hasAnsiSupport()method now works as expected.
10.0.7 (2024-01-19)
Improvements
- Query builder update queries can now have joins.
10.0.6 (2024-01-07)
Bugfixes
- Fixed request bug that would occur if PATH_INFOwas set but empty.
Improvements
- The framework now uses mako\envinstead ofgetenv.
10.0.5 (2023-12-07)
Bugfixes
- Fixed an issue where an uninitialized connection name in migration would throw an exception.
10.0.4 (2023-12-03)
Bugfixes
- Fixed an issue where an uninitialized response body causes problems.
10.0.3 (2023-11-27)
Bugfixes
- The validation factory $containerconstructor parameter no longer accepts null.
10.0.2 (2023-11-25)
New
- Sensitive parameters will be redacted if present in a stack trace when running on PHP 8.2+
9.1.5 (2023-11-24)
Bugfixes
- Ensure closing of connection when using the ConnectionManager::executeAndClose()method.
10.0.0 (2023-11-23)
The major version bump is due to dropped support for PHP 8.0 and a several breaking changes. Most applications built using Mako 9 should run on Mako 10 with just a few simple adjustments.
New
- Added the Session::disableAutoCommit()method.
- Added the Session::enableAutoCommit()method.
- Made the Session::gc()method public and added a$forceparameter.
- The following Requestproperties are now public readonly:- 
Request::$query
- 
Request::$post
- 
Request::$cookies
- 
Request::$files
- 
Request::$server
- 
Request::$headers
 
- 
- The following Responseproperties are now public readonly:- 
Response::$cookies
- 
Response::$headers
 
- 
- The following methods now accept both an int and the mako\http\response\Statusenum as a parameter value:- 
Response::setStatus()
- 
JSON::setStatus()
- 
Redirect::setStatus()
 
- 
- Added the HttpStatusException::getStatus()method.
- Simplified middleware and constraint registration.
- Global middleware and constraints can now be registered with parameters.
- Added the Dispatcher::registerGlobalMiddleware()method.
- Added the Router::registerGlobalConstraint()method.
 
- Added the 
- Added APCu session store.
- Added the $validateEmptyFieldsparameter to the validator to allow forced validation of empty fields.
Changes
- Removed the NuoDB query compiler.
- Removed the deprecated event library (use the bus library instead).
- Removed the deprecated command bus library (use the bus library instead).
- Removed the deprecated TimeInterface::formatLocalized()method.
- All class properties are now typed.
- The mako\http\response\Statusclass has been converted to an enum.
- The following methods now return an mako\http\response\Statusinstance instead of an int:- 
Response::getStatus()
- 
JSON::getStatus()
- 
Redirect::getStatus()
 
- 
- Removed the Dispatcher::registerMiddleware()method.
- Removed the Dispatcher::setMiddlewareAsGlobal()method.
- Changed the Dispatcher::setMiddlewarePriority()method signature.
- Removed the Router::registerConstraint()method.
- Removed the Router::setConstraintAsGlobal()method.
- Application controllers and routing have been moved to the app/httpnamespace.
Improvements
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
9.1.*.
9.1.4 (2023-11-16)
Bugfixes
- The not_emptyvalidation rule is now available.
9.1.3 (2023-11-09)
Bugfixes
- The logger service will no longer start the session unnecessarily if the gatekeeper service is enabled.
9.1.2 (2023-09-12)
Bugfixes
- The mako\env()function now works as expected with the falsy boolean value defined as "0".
9.1.1 (2023-06-23)
New
- Added Arr::append()method.
9.1.0 (2023-04-15)
New
- Added the following methods to the mako\file\FileSystemclass:- 
FileSystem::isLink()
- 
FileSystem::getLinkTarget()
- 
FileSystem::createSymbolicLink()
- 
FileSystem::createHardLink()
 
- 
- Added HTTPService::getRoutingPath()method to make it easier to reorganize the application structure.
- Added the following methods to the mako\utility\Arrclass:- 
Arr::toObject()
 
- 
- Added mako\http\exceptions\UnauthorizedExceptionexception.
- Exceptions handled by the Mako exception handlers will be assigned a unique id that makes it easier to find the corresponding log entry.
- Added a new bus library with command, event and query buses.
- New and improved output for the app:routescommand.
- The Query::insertAndGetId()method now allows inserting empty rows just like theQuery::insert()method.
- Added mako\env()helper function.
Deprecations
- Deprecated the mako\chrono\TimeInterface::formatLocalized()method.
- Deprecated the old command bus library (see the new command and query buses).
- Deprecated the old event library (see the new event bus).
8.1.5, 9.0.3 (2023-01-21)
Bugfixes
- Fixed migration rollbacks.
9.0.2 (2023-01-12)
Bugfixes
- Fixed autoloading of the RangeNotSatisfiableExceptionexception.
9.0.1 (2022-12-26)
Bugfixes
- The CommandInterface::handle()andSelfHandlingCommandInterface::handle()methods no longer enforce amixedreturn type.
9.0.0 (2022-12-22)
The major version bump is due to dropped support for PHP 7.4 and a several breaking changes. Most applications built using Mako 8 should run on Mako 9 with just a few simple adjustments.
New
- The name of CLI arguments with aliases can now be defined using an array instead of a string.
- The preloader generator will now attempt to preload typed properties, method arguments and return types.
- Route middleware can now be registered using only the class name.
- Route constraints can now be registered using only the class name.
- Added the following methods to the query builder:
- 
Query::rightJoin()
- 
Query::rightJoinRaw()
- 
Query::crossJoin()
- 
Query::lateralJoin()
- 
Query::insertMultiple()
 
- 
- Added the mako\f"function builder" helper function.
Changes
- Removed the Validator::rule()helper method in favor of the newmako\fhelper function.
- Removed the following deprecated methods from the Strclass:- 
Str::camel2underscored()
- 
Str::underscored2camel()
 
- 
- Renamed the following classes:
- 
mako\http\routing\traits\InputValidationTraittomako\validator\input\http\routing\traits\InputValidationTrait.
- 
mako\validator\input\HttpInputtomako\validator\input\http\Input.
- 
mako\validator\input\HttpInputInterfacetomako\validator\input\http\InputInterface.
- 
mako\http\routing\traits\AuthorizationTraittomako\gatekeeper\authorization\http\routing\traits\AuthorizationTrait.
 
- 
- The following class constants have been made protected:
- mako\application\cli\commands\server\Server::MAX_PORTS_TO_TRY
- mako\classes\ClassFinder::PHP_FILENAME_PATTERN
- mako\cli\input\arguments\Argument::NAME_REGEX
- mako\cli\input\arguments\Argument::ALIAS_REGEX
- mako\cli\input\arguments\ArgvParser::INT_REGEX
- mako\cli\input\arguments\ArgvParser::FLOAT_REGEX
- mako\cli\output\formatter\Formatter::TAG_REGEX
- mako\cli\output\formatter\Formatter::ESCAPED_TAG_REGEX
- mako\cli\output\formatter\Formatter::ANSI_SGR_SEQUENCE_REGEX
- mako\cli\output\helpers\Alert::PADDING
- mako\cli\output\helpers\Countdown::SLEEP_TIME
- mako\commander\CommandBus::COMMAND_SUFFIX
- mako\commander\CommandBus::HANDLER_SUFFIX
- mako\database\midgard\ORM::PRIMARY_KEY_TYPE_INCREMENTING
- mako\database\midgard\ORM::PRIMARY_KEY_TYPE_UUID
- mako\database\midgard\ORM::PRIMARY_KEY_TYPE_CUSTOM
- mako\database\midgard\ORM::PRIMARY_KEY_TYPE_NONE
- mako\database\midgard\relations\Relation::EAGER_LOAD_CHUNK_SIZE
- mako\database\query\compilers\Compiler::JSON_PATH_SEPARATOR
- mako\error\handlers\web\DevelopmentHandler::SOURCE_PADDING
- mako\i18n\I18n::PLURALIZATION_TAG_REGEX
- mako\i18n\I18n::NUMBER_TAG_REGEX
- mako\redis\Redis::CRLF
- mako\redis\Redis::CRLF_LENGTH
- mako\redis\Redis::VERBATIM_PREFIX_LENGTH
- mako\redis\Redis::END
- mako\security\crypto\encrypters\Encrypter::DERIVATION_HASH
- mako\security\crypto\encrypters\Encrypter::DERIVATION_ITERATIONS
- mako\security\Signer::MAC_LENGTH
- mako\session\Session::MAX_TOKENS
- mako\view\compilers\Template::VERBATIM_PLACEHOLDER
 
Improvements
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
8.1.*.
8.1.4 (2022-12-07)
Bugfixes
- Don't set the Content-Encoding header when sending a chunked data stream.
8.1.3 (2022-10-13)
Bugfixes
- PHP 8.1compatibility:- Creating a migration without a description will no longer fail.
 
8.1.2 (2022-10-12)
Bugfixes
- Junction tables will now be named correctly even when table names are prefixed by the database name.
7.3.9, 8.0.6, 8.1.1 (2022-06-12)
Bugfixes
- Fixed issue caused by breaking changes in Monolog.
8.1.0 (2022-04-26)
New
- It is now possible to use custom validation rules without registering them first.
- Added Str::camelToSnake()method.
- Added Str::snakeToCamel()method.
- Added CamelCasedTraitORM trait that enables camel cased interaction with ORM objects.
- The protectandexposemethods of the ORMResultSetclass are now chainable.
- Eager loaded relations can now be aliased.
- Route middleware can now be registered using the new Middlewareattribute (PHP 8.0+).
- Route constraints can now be registered using the new Constraintattribute (PHP 8.0+).
- The ORM $protectedproperty andprotectmethod now supports nested fields.
Deprecations
- Deprecated the Str::camel2underscoredmethod.
- Deprecated the Str::underscored2camelmethod.
7.3.8, 8.0.5 (2022-02-19)
Bugfixes
- PHP 8.1 compatibility.
7.3.7, 8.0.4 (2022-02-10)
Bugfixes
- Eager loading will now work as expected with ORM::getOrThrow()andQuery::getOrThrow().
7.3.6, 8.0.3 (2022-02-08)
Bugfixes
- PHP 8.2compatibility.
- Prevent errors with malformed request paths.
8.0.2 (2021-12-02)
Bugfixes
- Fixed issue with subqueries when using the ORM (#291).
6.3.20, 7.0.10, 7.1.5, 7.2.3, 7.3.5, 8.0.1 (2021-11-30)
Bugfixes
- PHP 8.1compatibility.
8.0.0 (2021-11-30)
The major version bump is due to dropped support for PHP 7.3 and a several breaking changes. Most applications built using Mako 7.3.0 should run on Mako 8.0.0 with just a few simple adjustments.
New
- Views can now be rendered by casting them to strings.
- Added WriterInterface::setStream()method.
- The query builder now supports enums (PHP 8.1+).
- The ORM can now cast values to enums (PHP 8.1+).
- Added boolean:falsevalidation rule.
- Added boolean:truevalidation rule.
- Added booleanvalidation rule.
- Added enumvalidation rule (PHP 8.1+).
- Added not_emptyvalidation rule.
- Added number:floatvalidation rule.
- Added number:intvalidation rule.
- Added number:natural_non_zerovalidation rule.
- Added number:naturalvalidation rule.
- Added numbervalidation rule.
- Added numericvalidation rule.
- Added stringvalidation rule.
- Middleware will now be executed even when routing throws NotFoundExceptionandMethodNotAllowedexceptions.
Changes
- The Str::alternator()method now returns anAlternatorinstance instead of a closure.
- Removed the deprecated AdapterManager::instance()method.
- Removed the deprecated ConnectionManager::instance()method.
- Removed the following deprecated methods from the Connectionclass:- 
Connection::builder()
- 
Connection::table()
 
- 
- Removed the deprecated ORM::builder()method.
- Removed the deprecated Route::namespace()method.
- Removed support for defining method controller actions as strings.
- Removed the deprecated AccessControlAllowOriginmiddleware.
- The following validation rules have been renamed:
- 
floattonumeric:float
- 
integertonumeric:int
- 
natural_non_zerotonumeric:natural_non_zero
- 
naturaltonumeric:natural
 
- 
- The following commands have been renamed:
- 
app.generate_preloadertoapp:generate-preloader
- 
app.generate_secrettoapp:generate-secret
- 
app.generate-keytoapp:generate-key
- 
app.routestoapp:routes
- 
cache.cleartocache:clear
- 
cache.removetocache:remove
- 
migrate.createtomigration:create
- 
migrate.downtomigration:down
- 
migrate.resettomigration:reset
- 
migrate.statustomigration:status
- 
migrate.uptomigration:up
- 
servertoapp:server
 
- 
- The following exceptions have been renamed:
- 
mako\cli\output\formatter\FormatterExceptiontomako\cli\output\formatter\exceptions\FormatterException
- 
mako\config\loaders\LoaderExceptiontomako\config\loaders\exceptions\LoaderException
- 
mako\gatekeeper\authorization\AuthorizerExceptiontomako\gatekeeper\authorization\exceptions\AuthorizerException
- 
mako\http\exceptions\HttpExceptiontomako\http\exceptions\HttpStatusException
- 
mako\i18n\I18nExceptiontomako\i18n\exceptions\I18nException
- 
mako\i18n\loaders\LoaderExceptiontomako\i18n\loaders\exceptions\LoaderException
- 
mako\onion\OnionExceptiontomako\onion\exceptions\OnionException
- 
mako\redis\RedisExceptiontomako\redis\exceptions\RedisException
- 
mako\security\crypto\CryptoExceptiontomako\security\crypto\exceptions\CryptoException
- 
mako\security\password\HasherExceptiontomako\security\password\exceptions\HasherException
- 
mako\validator\ValidationExceptiontomako\validator\exceptions\ValidationException
- 
mako\view\ViewExceptiontomako\view\exceptions\ViewException
 
- 
- Added $fieldparameter to theRuleInterface::validate()method.
Improvements
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
7.3.*.
6.3.19, 7.0.9, 7.1.4, 7.2.2, 7.3.4 (2021-11-28)
Bugfixes
- PHP 8.1compatibility.
7.3.3 (2021-11-22)
Changes
- The InputValidationmiddleware will now keep access control headers when clearing the response.
7.3.2 (2021-11-05)
Bugfixes
- The app.routescommand now works with route actions defined as arrays.
7.3.1 (2021-10-25)
New
- Added protected AccessControl::getAllowedDomains()method.
7.3.0 (2021-10-19)
New
- Added abstract AccessControlmiddleware.
- Added new and cleaner way of registering class methods as route actions.
- Added Cookies::clearExcept()method.
- Added Headers::clearExcept()method.
- Added Response::clearExcept()method.
- Added Response::resetExcept()method.
- It is now possible to define a whitelist of cookies and headers to keep when an exception has been handled.
- Added Connection::firstOrThrow()method to the database connection class.
- Added Query::firstOrThrow()method to the base query builder class.
- Added Query::getOrThrow()method to the ORM query builder class.
- Added Query::firstOrThrow()method to the ORM query builder class.
- Added ORM::getOrThrow()method.
- The database library will now throw mako\database\exceptions\DatabaseExceptionexceptions that extend the previously thrownRuntimeExceptionexceptions.
- Added ConnectionManager::getConnection()method.
- Added Connection::getQuery()method.
- Added ORM::getQuery()method.
- Added FileSystem::copy()method.
- Added CacheManager::getInstance()method.
- Added CacheManager::getStore()method.
- Added CryptoManager::getInstance()method.
- Added CryptoManager::getEncrypter()method.
- Added Headers::getBearerToken()method.
Deprecations
- Deprecated the AccessControlAllowOriginmiddleware.
- Deprecated the Route::namespace()method.
- Deprecated the ConnectionManager::connection()method.
- Deprecated the Connection::builder()method.
- Deprecated the Connection::table()method.
- Deprecated the ORM::builder()method.
- Deprecated CacheManager::instance()method.
- Deprecated CryptoManager::instance()method.
Improvements
- Better autocompletion when calling methods proxied by __callmethods.
All deprecated features will be removed in Mako 8.0.
6.3.18, 7.0.8, 7.1.3, 7.2.1 (2021-10-12)
Bugfixes
- PHP 8.1compatibility.
7.2.0 (2021-03-02)
New
- The default production error handler now has "dark mode" support.
- New and improved development error handler with "dark mode" support.
- Added setMetadataandgetMetadatamethods to theHttpExceptionclass.- The HttpExceptionmetadata array is available in the production error views as$_metadata_.
- The HttpExceptionmetadata array will also be avaiable in the JSON and XML representation of the errors.
 
- The 
- Template block names can now be surrounded by single quotes for consistency.
Changes
- The language cache has been removed as OPcache will cache the language files in memory and load them faster than any other cache solution.
7.0.7, 7.1.2 (2021-01-28)
Bugfixes
- The ORM will now throw an exception when attempting to access related records on non-persisted models instead of loading random records.
6.3.17, 7.0.6, 7.1.1 (2021-01-12)
Bugfixes
- Fixed bug that could occur when building "non-clean" URLs in the command line.
7.1.0 (2020-12-31)
New
- It is now possible to register contextual dependencies for class methods in the container.
- Added a HTTP status code helper class.
- Added missing status codes to Responseclass.
- Added a Retryhelper class that allows you to retry a callable a set number of times.
- Added Application::getStoragePath()method.
- Added a Finderclass.
- Added a ClassFinderclass.
- Added app.generate_preloadercommand that generates an opcache preloder script for improved production performance (only available on PHP7.4and greater).
- It is now possible for reactor commands to automatically register themselves.
- Added getCommandmethod to theCommandInterfaceinterface.
Changes
- Cloned database connections will now get a new PDO instance and have their query log and transaction nesting level reset.
- The ClassInspectorclass has been moved from themako\syringenamespace to themako\classesnamespace.
6.3.16, 7.0.5 (2020-11-26)
Bugfixes
- Fixed error that could occur when restoring GD snapshots on PHP 8.0.
6.3.15, 7.0.4 (2020-11-23)
Bugfixes
- Connection managers will now close connections before removing configurations when calling the removeConfigurationmethod.
6.3.14, 7.0.3 (2020-10-26)
Bugfixes
- Fixed an issue where the path to the reactor executable would fail. (#283).
6.3.13, 7.0.2 (2020-10-22)
Bugfixes
- Fixed an issue where the path to the application could prevent the development server from starting (#282).
7.0.1 (2020-09-15)
Bugfixes
- Fixes an issue where ORM::toArray()would fail when a related record isnull(#279).
7.0.0 (2020-09-14)
The major version bump is due to dropped support for PHP 7.2 and a several breaking changes. Most applications built using Mako 6.3.0 should run on Mako 7.0.0 with just a few simple adjustments.
New
- Added Collection::first()method.
- Added Collection::last()method.
- Added support for the samesitecookie option (defaults toLax).
- Added Query::withCountOf()method to the ORM query builder.
- Added abstract AccessControlAllowOriginmiddleware.
- Added Cookies::addRaw()method.
- Added Cookies::addRawSigned()method.
- Added a InputValidationTraitfor use in a controller context.
- The Redis client now supports Redis 6 ACL as well as the new RESP3 protocol.
- The following "raw" query builder methods now support bound query parameters:
- 
Join::onRaw()
- 
Join::orOnRaw()
- 
Query::selectRaw()
- 
Query::orderByRaw()
- 
Query::ascendingRaw()
- 
Query::descendingRaw()
 
- 
Changes
- The cache StoreInterface::get()method will now returnnullinstead offalsewhen the item does not exist in the cache.
- The following methods in the database library will now return nullinstead offalsewhen no matching record is found:- 
Connection::first()
- 
Connection::column()
- 
Query::first()
- 
Query::column()
- 
Query::get()
- 
ORM::get()
 
- 
- The following methods in the Gatekeeper library will now return nullinstead offalsewhen unable to retrieve data:- 
GroupRepositoryInterface::getByIdentifier()
- 
GroupRepository::getById()
- 
GroupRepository::getByName()
- 
UserRepositoryInterface::getByIdentifier()
- 
UserRepository::getByAccessToken()
- 
UserRepository::getByActionToken()
- 
UserRepository::getByEmail()
- 
UserRepository::getById()
- 
UserRepository::getByUsername()
 
- 
- Passing a Queryinstance to theSubqueryconstructor is no longer supported.
- Passing a ClosureorQueryinstance to represent a subquery to the following methods is no longer supported:- 
Query::table()
- 
Query::from()
- 
Query::into()
- 
Query::in()
- 
Query::notIn()
- 
Query::orIn()
- 
Query::orNotIn()
- 
Query::exists()
- 
Query::orExists()
- 
Query::notExists()
- 
Query::orNotExists()
- 
Query::with()
- 
Query::withRecursive()
 
- 
- Dropped support for DB2databases.
- Removed the following deprecated methods from the UploadedFileclass:- 
UploadedFile::getName()
- 
UploadedFile::getReportedType()
 
- 
- Removed the following deprecated constants from the Redirectclass:- 
Redirect::MULTIPLE_CHOICES
- 
Redirect::NOT_MODIFIED
- 
Redirect::USE_PROXY
 
- 
- Removed the following deprecated methods from the Redirectclass:- 
Redirect::multipleChoices()
- 
Redirect::notModified()
- 
Redirect::useProxy()
 
- 
- Removed the following deprecated methods from the ErrorHandlerclass:- 
ErrorHandler::disableLoggingFor()
 
- 
- Removed the following deprecated validation rule aliases:
- 
max_filesize
- 
mimetype
 
- 
- Removed the deprecated commandInformationproperty from theCommandclass.
- Removed the following deprecated cache stores:
- 
ZendDisk
- 
ZendMemory
 
- 
- Removed support for the deprecated "empty else" template syntax.
- Class aliases will no longer be registered during the application boot process.
- The Gatekeeper Adapter::activateUser()method will now always return a boolean value as described in the documentation.
- Renamed the InputValidationTrait::validate()method toInputValidationTrait::getValidatedInput().
- Removed the undocumented recursive configuration file merging.
- Renamed Validator::validate()toValidator::getValidatedInput().
Improvements
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
6.3.*.
6.3.12 (2020-08-19)
Bugfixes
- PHP 8.0compatibility.
6.3.11 (2020-07-15)
Bugfixes
- PHP 8.0compatibility.
6.3.10 (2020-07-09)
Bugfixes
- PHP 8.0compatibility.
6.2.5, 6.3.9 (2020-06-04)
Bugfixes
- Fixed issue that occurred when cloning queries that have set operations.
- Query pagination now works with queries that have set operations.
6.3.8 (2020-01-12)
Changes
- 
ManyToMany::unlink()andManyToMany::updateLink()now supports wheres.
6.3.7 (2019-11-26)
Changes
- The error handler will now attempt to log logger exceptions using PHP's system logger.
6.3.6 (2019-11-12)
Changes
- The old input from the InputValidationmiddleware will no longer be cast to an object before being assigned to views.
6.3.5 (2019-11-07)
Changes
- The ProgressBar::advance()method will now throw aLogicExceptionwhen trying to advance past 100%.
6.3.4 (2019-11-04)
Changes
- The $ruleSetsparameter of theValidatorFactoryandValidatorconstructors is now optional.
6.3.3 (2019-10-23)
Changes
- Refactored the InputValidationmiddleware and added theHttpInputInterfaceinterface.
6.3.2 (2019-10-21)
Bugfixes
- 
Request::isSecure()will no longer fail ifREMOTE_ADDRisn't set.
6.3.1 (2019-10-21)
Bugfixes
- 
Request::getIp()will no longer fail ifREMOTE_ADDRisn't set.
6.3.0 (2019-10-20)
New
- Added TimeImmutableclass.
- Added Time::copy()method.
- Added Time::getImmutable()method.
- Added Redis::subscribeTo()method.
- Added Redis::subscribeToPattern()method.
- Added Redis::monitor()method.
- Added UploadedFile::getReportedFilename()method.
- Added UploadedFile::getReportedMimeType()method.
- Added max_file_sizevalidation rule.
- Added mime_typevalidation rule.
- Added max_filename_lengthvalidation rule.
- Added SecurityHeadersmiddleware.
- Added ContentSecurityPolicymiddleware.
- Added InputValidationmiddleware.
- Added InputValidationTraittrait that reduces the need for validation boilerplate.
- Added FileSystem::getDiskSize()method.
- Added FileSystem::getFreeSpaceOnDisk()method.
- Added JSON::getStatus()method.
- Added JSON::getCharset()method.
- Added Redirect::getStatus()method.
- Added Stream::getType()method.
- Added Stream::getCharset()method.
- Added Response::getRequest()method.
Deprecations
- The following methods have been deprecated and will be removed in 7.0:- 
UploadedFile::getName()(replaced byUploadedFile::getReportedFilename())
- 
UploadedFile::getReportedType()(replaced byUploadedFile::getReportedMimeType())
- 
Redirect::multipleChoices()
- 
Redirect::notModified()
- 
Redirect::useProxy()
 
- 
- The following validation rules have been deprecated and will be removed in 7.0:- 
max_filesize(replaced bymax_file_size)
- 
mimetype(replaced bymime_type)
 
- 
Improvements
- Massive speed improvements when sending large values to Redis.
- Reduced number of method calls when hydrating models.
5.7.8, 6.0.7, 6.1.6, 6.2.4 (2019-09-27)
Bugfixes
- The correct field name will now be displayed when using wildcard validation rules.
5.7.7, 6.0.6, 6.1.5, 6.2.3 (2019-09-09)
Bugfixes
- Fixed breaking change introduced in 5.7.6,6.0.5,6.1.4and6.2.2.
5.7.6, 6.0.5, 6.1.4, 6.2.2 (2019-09-05)
Bugfixes
- Fixed bug that could cause the production error handler to fail when using the view auto assign feature.
6.2.1 (2019-08-27)
Bugfixes
- Fixed breaking change introduced in 6.2.0.
6.2.0 (2019-08-26)
New
- New and improved command line argument parser.
- Added Request::isCacheable()method.
- Added Request::isIdempotent()method.
- Added Response::isCacheable()method.
- Added ValidationException::getMessageWithErrors()method.
- The query builder now supports multiple tables in the FROMclause.
Changes
- Commands are now required to define their arguments.
- The Command::$isStrictproperty doesn't do anything as all commands are required to define their arguments.
- The OPTIONSandTRACErequest methods are now also considdered safe by theRequest::isSafe()method.
Deprecations
- The Command::$commandInformationproperty is deprecated and will be removed in7.0.
- The application.class_aliasesconfig key is deprecated and will be removed in7.0.
- The ZendDiskcache store is deprecated and will be removed in7.0.
- The ZendMemorycache store is deprecated and will be removed in7.0.
- Passing a ClosureorQueryinstance to represent a subquery to the following methods is deprecated and will stop working in7.0:- 
Query::table()
- 
Query::from()
- 
Query::into()
- 
Query::in()
- 
Query::notIn()
- 
Query::orIn()
- 
Query::orNotIn()
- 
Query::exists()
- 
Query::orExists()
- 
Query::notExists()
- 
Query::orNotExists()
- 
Query::with()
- 
Query::withRecursive()
 
- 
- Passing a Closure,QueryorSubqueryinstance to the following methods is deprecated and will stop working in7.0:- 
Query::union()
- 
Query::unionAll()
- 
Query::intersect()
- 
Query::intersectAll()
- 
Query::except()
- 
Query::exceptAll()
 
- 
- Support for DB2databases is deprecated and will be removed in7.0.
Check out the upgrade guide for details on how to upgrade from
6.1.*.
5.7.5, 6.0.4, 6.1.3 (2019-08-10)
Bugfixes
- Fixed breaking change introduced in 5.7.4,6.0.4and6.1.2.
5.7.4, 6.0.3, 6.1.2 (2019-08-10)
Bugfixes
- PHP 7.4compatibility.
5.7.3, 6.0.2, 6.1.1 (2019-08-08)
Bugfixes
- Package validation rule i18n messages will now work as expected.
6.1.0 (2019-08-02)
New
- The server command will make up to 10 attempts to find an available port if the default one is in use.
- Added Container::hasInstanceOf()method.
- It is now possible to send additional arguments to authorization policy methods.
- Added bitonal filter to the image library (#258).
- Added new collection methods:
- 
Collection::with()
- 
Collection::without()
 
- 
- The following Collection methods are now chainable:
- 
clear
- 
each
- 
put
- 
remove
- 
resetKeys
- 
shuffle
- 
sort
 
- 
- Added support for common table expressions to the query builder.
- 
Query::with()
- 
Query::withRecursive()
 
- 
- Added Query::forCompiler()method that can be used to add dialect specific SQL to queries.
- Added Query::selectRaw()method.
- Added Query::whereColumn()method.
- Added query builder date helpers:
- 
Query::whereDate()
- 
Query::orWhereDate()
- 
Query::betweenDate()
- 
Query::orBetweenDate()
- 
Query::notBetweenDate()
- 
Query::orNotBetweenDate()
 
- 
- MySQL and SQLite query builder queries now support offsets without limits.
- The query builder now supports select queries without a table.
- Added new syntax for default values in templates.
- The production web error handler no longer requires a view factory instance.
- It is now easier to override the storage path of compiled templates and log files using the new application.storage_pathconfig key.
- Added ErrorHandler::dontLog()method.
- It is now possible to disable logging of specific exceptions types using the new application.error_handler.dont_logconfig key.
Deprecations
- 
The {{$foo || 'Default}}and{{$foo or 'Default}}template syntax has been deprecated and will be removed in7.0use the{{$foo, default: 'Default'}}syntax instead.
- 
The ErrorHandler::disableLoggingFor()method has been deprecated and will be removed in7.0. Use the newErrorHandler::dontLog()method instead.
Check out the upgrade guide for details on how to upgrade from
6.0.*.
5.7.2, 6.0.1 (2019-05-21)
Bugfixes
- Images will now be rotated in the same direction when using ImageMagick and GD.
6.0.0 (2019-03-30)
The major version bump is due to dropped support for PHP 7.0 and 7.1 and a several breaking changes. Most applications built using Mako 5.7.0 should run on Mako 6.0.0 with just a few simple adjustments.
New
- Added optionalvalidation rule.
- Added time_zonevalidation rule.
- Added Validator::validate()method that returns the validated input on success and throws anValidationExceptionon failure.
- The container will now inject nullwhen unable to resolve a nullable or optional class dependency.
- Added Loggerclass that extends the monolog logger with functionality to set global log context parameters (the gatekeeper user id will automatically be added if possible).
- Added the mako\cli\Environmentclass with the following methods:- 
Environment::getDimensions()
- 
Environment::getWidth()
- 
Environment::getHeight()
- 
Environment::hasAnsiSupport()
 
- 
- Added Output::getEnvironment()method.
- Added JSON::setCharset()method.
- Added Stream::setType()method.
- Added Stream::setCharset()method.
- Added scopemethod to the ORM query builder.
- Added UUID::toBinary()method.
- Added UUID::toHexadecimal()method.
- Added UUID::sequential()method.
- Added Output::dump()method.
- Added authorization to the gatekeeper library.
Changes
- Removed the deprecated FileSystem::mime()method.
- Removed the deprecated FileSystem::hash()method.
- Removed the deprecated FileSystem::hmac()method.
- The ORM query builder no longer supports "magic" scope methods. Use the scopemethod instead.
- The RequestExceptionclass has been renamed toHttpException.
- Removed the Constraintbase class. Constraints should implement theConstraintInterfaceinstead.
- Constraints parameters are now injected through the constructor.
- Removed the Middlewarebase class. Middleware should implement theMiddlewareInterfaceinstead.
- Middleware parameters are now injected through the constructor.
- Validator rule parameters are now injected via the constructor.
- Removed the Output::hasAnsiSupport()method.
- The mako\gatekeeper\Authenticationclass has been renamed tomako\gatekeeper\Gatekeeper.
- Several of the mako\http\Requestmethods have been renamed for consistency:- The Request::contentType()method has been renamed toRequest::getContentType().
- The Request::scriptName()method has been renamed toRequest::getScriptName().
- The Request::ip()method has been renamed toRequest::getIp().
- The Request::basePath()method has been renamed toRequest::getBasePath().
- The Request::baseURL()method has been renamed toRequest::getBaseURL().
- The Request::path()method has been renamed toRequest::getPath().
- The Request::language()method has been renamed toRequest::getLanguage().
- The Request::languagePrefix()method has been renamed toRequest::getLanguagePrefix().
- The Request::method()method has been renamed toRequest::getMethod().
- The Request::realMethod()method has been renamed toRequest::getRealMethod().
- The Request::username()method has been renamed toRequest::getUsername().
- The Request::password()method has been renamed toRequest::getPassword().
- The Request::referer()method has been renamed toRequest::getReferrer().
 
- The 
- Several of the mako\http\request\Headersmethods have been renamed for consistency:- The Headers::acceptableContentTypes()method has been renamed toHeaders::getAcceptableContentTypes().
- The Headers::acceptableLanguages()method has been renamed toHeaders::getAcceptableLanguages().
- The Headers::acceptableCharsets()method has been renamed toHeaders::getAcceptableCharsets().
- The Headers::acceptableEncodings()method has been renamed toHeaders::getAcceptableEncodings().
 
- The 
- Several of the mako\http\Responsemethods have been renamed for consistency:- The Response::body()method has been renamed toResponse::setBody().
- The Response::charset()method has been renamed toResponse::setCharset().
- The Response::status()method has been renamed toResponse::setStatus().
- The Response::type()method has been renamed toResponse::setType().
- The Response::cache()method has been renamed toResponse::enableCaching().
- The Response::compress()method has been renamed toResponse::enableCompression().
- The JSON::status()method has been renamed toJSON::setStatus().
- The Redirect::status()method has been renamed toRedirect::setStatus().
 
- The 
- The ExtendableTrait::extend()method has been renamed toExtendableTrait::addMethod().
Check out the upgrade guide for details on how to upgrade from
5.7.*.
5.7.1 (2019-01-05)
New
- Added optional --exit-codeoption tomigrate.statuscommand.
5.7.0 (2018-12-06)
New
- It is now possible to eager load relations on a loaded model using the ORM::include()method.
- It is now possible to eager load relations on a result set using the ResultSet::include()method.
- Added ORM::includes()method that returnstrueif a relation has been loaded andfalseif not.
- Added PaginationInterface::toArray()method.
- Added PaginationInterface::toJSON()method.
- The PaginationInterfaceinterface now extends theJsonSerializableinterface.
- The query builder now supports basic tuple comparisons.
- It is now possible to provide a list of superglobal keys to blacklist from the Whoops error view
- It is now possible to set raw cookies.
- Added FileInfoclass that extendsSplFileInfowith the following methods:- 
FileInfo::getMimeType().
- 
FileInfo::getMimeEncoding().
- 
FileInfo::getHash().
- 
FileInfo::validateHash().
- 
FileInfo::getHmac().
- 
FileInfo::validateHmac().
 
- 
- Added FileSystem::info()method that returns aFileInfoobject.
- Added new validation rules:
- Added hashrule.
- Added hmacrule.
- Added aspect_ratiorule.
- Added exact_dimensionsrule.
- Added max_dimensionsrule.
- Added min_dimensionsrule.
 
- Added 
Changes
- Removed the deprecated mako\security\Passwordclass.
- Removed the deprecated ORM::$existsproperty.
- Removed the deprecated ORM::exists()method.
- The gatekeeper forceLoginmethod now returnstrueif the login is successful and a status code if not.
- The JSON representation of a result set returned by the Query::paginate()method will now be an object where the results are available asdataand pagination information will be available aspagination({"data":[...], "pagination":{...}}).
- An exception will be thrown when trying to set a secure session or gatekeeper cookie over a non-secure connection.
- The URL builder will now separate query string parameters with &instead of&.
- The URL builder will now encode query string parameters using PHP_QUERY_RFC3986.
Deprecations
- Deprecated the FileSystem::mime()method.
- Deprecated the FileSystem::hash()method.
- Deprecated the FileSystem::hmac()method.
Improvements
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
5.6.*.
5.6.0 (2018-10-15)
New
- Added Request::basePath()method.
- Added BelongsToPolymorphicrelation.
- Added ORM::$isPersistedproperty.
- Added ORM::isPersisted()method.
- Added Query::sharedLock()convenience method.
- It is now possible to use aggregate methods (count,min,max, etc...) in a subquery context.
- Migrations are now executed in a transaction if possible (Postgres, SQLite).
- Added multi database support to migrations.
- Added an option to opt out of atomic getOrElsefor APCU caching. Use theatomic_get_or_elsekey.
- Added ConnectionManager::close()method.
- Added ConnectionManager::executeAndClose()method.
- Added Connection::close()method (to the database base connection class).
- Added new jsonvalidation rule.
- Added new arrayvalidation rule.
- You can now specify which IP version you're validating when using the ipvalidation rule.
- Added FileSystem::rename()method.
- It is now possible to set a custom timeout for Redis connections.
- Added new password hashing library:
- Added new Bcrypthasher class.
- Added new Argon2ihasher class.
- Added new Argon2idhasher class.
 
- Added new 
Changes
- Removed the global --databasereactor option.
Deprecations
- Deprecated the ORM::$existsproperty.
- Deprecated the ORM::exists()method.
- Deprecated the mako\security\Passwordclass.
Improvements
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
5.5.*.
5.5.7 (2018-06-14)
Improvements
- The Str::slug()method no longer strips dashes from the input string.
- Added hardware,softwareandfurnitureto the list of irregular words used byStr::pluralize().
5.5.6 (2018-05-23)
Improvements
- Improved handling of invalid i18n keys.
5.5.5 (2018-05-11)
Bugfixes
- Fixed issue where the uniquerule would fail when used with case-insensitive databases.
5.5.4 (2018-04-07)
Improvements
- You can now use orin addition to||when printing template variables.
- You can now prefix variable names with a $in template capture blocks.
5.5.3 (2018-03-22)
Improvements
- The pagination factory no longer requires the view and http services.
5.5.2 (2018-03-21)
New
- Added Validator::rule()helper method.
5.0.25, 5.1.4, 5.2.12, 5.3.3, 5.4.1, 5.5.1 (2018-03-20)
Bugfixes
- Migrations will no longer fail with empty description.
5.5.0 (2018-03-20)
New
- Added Validator::extend()method.
- Added Validator::addRules()method.
- Added Validator::addRulesIf()method.
- Added ValidatorFactory::extend()method.
- Added new validation rules:
- Added mimetyperule.
- Added max_filesizerule.
- Added is_uploadedrule.
 
- Added 
Changes
- Removed Responsemethods that where deprecated in 5.4:- Removed the Response::header()method.
- Removed the Response::hasHeader()method.
- Removed the Response::removeHeader()method.
- Removed the Response::clearHeaders()method.
- Removed the Response::cookie()method.
- Removed the Response::signedCookie()method.
- Removed the Response::deleteCookie()method.
- Removed the Response::hasCookie()method.
- Removed the Response::removeCookie()method.
- Removed the Response::clearCookies()method.
 
- Removed the 
- Removed Validator::registerPlugin()method.
- Removed ValidatorFactory::registerPlugin()method.
Improvements
- New and improved input validation with support for nested arrays and file validation.
Check out the upgrade guide for details on how to upgrade from
5.4.*.
5.4.0 (2018-03-05)
New
- Added Application::startTime()method.
- The container now supports replacing previously registered/resolved items:
- Added Container::replace()method.
- Added Container::replaceSingleton()method.
- Added Container::replaceInstance()method.
- Added Container::onReplace()method.
 
- Added 
- Added Request::contentType()method.
- Added Response::reset()method.
- Added mako\cli\output\Output::hasAnsiSupport()method.
- Added mako\cli\output\Output::clearLine()method.
- Added mako\cli\output\Output::clearLines()method.
- Added mako\cli\output\formatter\Formatter::stripSGR()method.
- Added mako\cli\output\formatter\FormatterInterface::stripTags()method.
- Added mako\cli\output\helpers\ProgressBar::remove()method.
- Added mako\cli\output\helpers\ProgressBar::setPrefix()method.- Added optional $prefixparameter to theCommand::progressBar()method.
 
- Added optional 
- Added optional $priorityparameter to themako\http\routing\Dispatcher::registerMiddleware()method.
Changes
- The Container::factory()method is now public.
- The Request::getBody()method now returns an instance ofmako\http\request\Body.
- Removed Requestmethods that where deprecated in 5.3:- Removed the Request::get()method.
- Removed the Request::post()method.
- Removed the Request::put()method.
- Removed the Request::patch()method.
- Removed the Request::delete()method.
- Removed the Request::cookie()method.
- Removed the Request::signedCookie()method.
- Removed the Request::file()method.
- Removed the Request::server()method.
- Removed the Request::has()method.
- Removed the Request::data()method.
- Removed the Request::whitelisted()method.
- Removed the Request::blacklisted()method.
- Removed the Request::header()method.
- Removed the Request::acceptableContentTypes()method.
- Removed the Request::acceptableLanguages()method.
- Removed the Request::acceptableCharsets()method.
- Removed the Request::acceptableEncodings()method.
 
- Removed the 
- Removed Responsefilters:- Removed the Response::filter()method.
- Removed the Response::getFilters()method.
- Removed the Response::clearFilters()method.
 
- Removed the 
- The Response::getHeaders()method now returns a response header collection.
- The Response::getCookies()method now returns a response cookie collection.
- Removed the mako\cli\output\formatter\Formatter::hasAnsiSupport()method.
- Removed the mako\cli\output\formatter\FormatterInterface::strip()method.
- Arguments are now converted to camel case before being passed to the executemethod of reactor commands.
Deprecations
- Deprecated the Response::header()method.
- Deprecated the Response::hasHeader()method.
- Deprecated the Response::removeHeader()method.
- Deprecated the Response::clearHeaders()method.
- Deprecated the Response::cookie()method.
- Deprecated the Response::signedCookie()method.
- Deprecated the Response::deleteCookie()method.
- Deprecated the Response::hasCookie()method.
- Deprecated the Response::removeCookie()method.
- Deprecated the Response::clearCookies()method.
Improvements
- Unit tests now run using PHPUnit 6.
- Removed unnecessary function calls in Redis client.
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
5.3.*.
5.3.2 (2018-03-01)
Improvements
- The Request::getData()method will now return the parsed body for POST requests that do not contain form data.
5.3.1 (2018-01-24)
Bugfixes
- The GDimage processor will no longer fail when using uppercase file extensions when saving.
Changes
- The GDimage processor now usesimagecopyresampledinstead ofimagecopyresizedwhen resizing images.
Improvements
- Columns with nullvalues will no longer be updated unnecessarily when usingORM::save().
5.3.0 (2018-01-10)
New
- Added Connection::pairs()method.
- Added Query::pairs()method.
- Added Collection::merge()method.
- 
Collection::map()callables can now accept the item key as a second argument.
- 
Collection::filter()callables can now accept the item key as a second argument.
- It is now possible to auto assign variables to views using the ViewFactory::autoAssign()method.
- JSON responses can now set the response status code.
- It is now possible to capture output in a template using the new {% capture:name %}...{% endcapture %}blocks.
- Added {% nospace %}...{% endnospace %}blocks to template syntax that will remove all whitespace between HTML tags.
- Added PaginationInterface::isValidPage()method.
- Mako is now using Whoops for displaying exception details.
- It is now possible to register route constraints with the router.
- It is now possible to set and update junction attributes.
- Added Request::getQuery()method.
- Added Request::getPost()method.
- Added Request::getHeaders()method.
- Added Request::getCookies()method.
- Added Request::getBody()method.
- Added Request::getData()method.
- Added Request::getFiles()method.
- Added Request::getServer()method.
- Added Parameters::whitelisted()method.
- Added Parameters::blacklisted()method.
Changes
- Moved the ContainerAwareTraittrait to themako\syringe\traitsnamespace.
- Moved the ControllerHelperTraittrait to themako\http\routing\traitsnamespace.
- Moved the ConfigurableTraittrait to themako\common\traitsnamespace.
- Moved the ExtendableTraittrait to themako\common\traitsnamespace.
- Moved the FunctionParserTraittrait to themako\common\traitsnamespace.
- Moved the NamespacedFileLoaderTraittrait to themako\common\traitsnamespace.
- The Str::slug()method now usesrawurlencodeinstead ofurlencode.
- All HTTP middleware must now implement the mako\http\routing\middleware\MiddlewareInterface.
- HTTP middleware is now registered with the route dispatcher.
- The Route::when()method has been renamed topatterns.
- Renamed the Request::body()method togetRawBody.
- Renamed the Request::bodyAsStreammethodgetRawBodyAsStream.
Deprecations
- Deprecated the Request::get()method.
- Deprecated the Request::post()method.
- Deprecated the Request::put()method.
- Deprecated the Request::patch()method.
- Deprecated the Request::delete()method.
- Deprecated the Request::cookie()method.
- Deprecated the Request::signedCookie()method.
- Deprecated the Request::file()method.
- Deprecated the Request::server()method.
- Deprecated the Request::has()method.
- Deprecated the Request::data()method.
- Deprecated the Request::whitelisted()method.
- Deprecated the Request::blacklisted()method.
- Deprecated the Request::header()method.
- Deprecated the Request::acceptableContentTypes()method.
- Deprecated the Request::acceptableLanguages()method.
- Deprecated the Request::acceptableCharsets()method.
- Deprecated the Request::acceptableEncodings()method.
Deprecated methods will be removed in 5.4.0.
Check out the upgrade guide for details on how to upgrade from
5.2.*.
5.2.11 (2017-11-30)
Bugfixes
- Fixes issue that prevents accidental login after logout. The issue would occur if the mako\gatekeeper\adapters\Session::getUser()method got called after themako\gatekeeper\adapters\Session::logout()method if the user had a "remember me" cookie.
5.2.10 (2017-11-18)
Bugfixes
- The Memcache::putIfNotexists()andMemcached::putIfNotexists()methods will now support TTLs longer than 30 days.
5.2.9 (2017-10-26)
Bugfixes
- Errors will now be logged even if the default error handler isn't called.
5.2.8 (2017-10-13)
Bugfixes
- 
ManyToMany::synchronize()will no longer execute unnecessary and invalid queries that cause exceptions.
5.2.7 (2017-10-12)
Bugfixes
- Package config overrides will now merge properly with original config.
5.2.6 (2017-10-11)
Bugfixes
- Package config overrides now merges with original config.
5.2.5 (2017-10-07)
New
- Now possible to insert databases rows with only default values.
5.2.4 (2017-09-21)
New
- Added ManyToMany::alongWith()method.
5.2.3 (2017-08-22)
Bugfixes
- Batch queries will no longer fail when having criteria.
5.2.2 (2017-08-16)
Bugfixes
- Will now automatically unlock locked used accounts when the lock time has expired.
5.2.1 (2017-06-06)
Bugfixes
- Fixed language cache bug that was introduced in 5.2.0.
5.2.0 (2017-05-08)
New
- Added putIfNotexists()method to all cache adapters.
- The apcu,memcached,memory,nullandrediscache stores now implement the newmako\cache\stores\IncrementDecrementInterfaceinterface.
- Added Collection::getValues()method.
- Added Collection::each()method.
- Added Collection::map()method.
- Added Collection::filter()method.
- It is now possible to pass custom PDO options to a connection.
- It is now possible to format numbers in i18n strings using the <number>tag.
Changes
- The Gatekeeperlibrary has been rewritten. It is now possible to implement custom authentication adapters.
- The Gatekeeper::basicAuth()method will now always return a boolean value.
- Headers will now be set with the case that they where defined with.
- The CacheManager::instance()method now returns amako\cache\stores\StoreInterfaceinstance instead of amako\cache\Cacheinstance.
Bugfixes
- The reactor --envflag now works as expected.
Improvements
- The ORM will now use fully qualified column names in the relation query criterion.
- Various improvements and optimizations.
Check out the upgrade guide for details on how to upgrade from
5.1.*.
5.1.3 (2017-02-17)
Bugfixes
- Request::getParsed() no longer fails if the content type header contains a character set.
5.1.2 (2017-01-25)
Changes
- The function parser is now less strict when it comes to function names.
5.1.1 (2017-01-17)
Changes
- JSONP responses are now handled by the JSON response builder.
5.1.0 (2017-01-16)
New
- Added a optional NullableTraitto the ORM.
- Added Command::STATUS_SUCCESSconstant.
- Added Command::STATUS_ERRORconstant.
- Added cache.removecommand.
- Added cache.clearcommand.
- Added application.base_urlconfig key.
- Now possible to set middleware priority.
- The ORM now allows you to configure the foreign key name using the $foreignKeyNameproperty.
Changes
- The response class will no longer auto render views. Views should be rendered in the controller.
- Removed the query convenience trait.
- Removed support for "piped" validation rules.
- New syntax for passing parameters to middleware.
- New syntax for passing parameters to validation rules.
Bugfixes
- ORM::getForeignKey() now uses Str::camel2underscored() instead of strtolower().
Check out the upgrade guide for details on how to upgrade from
5.0.*.
5.0.23 (2017-01-01)
Bugfixes
- Query compiler will now properly escape JSON path segments.
- MySQL query compiler will now unquote extracted JSON values.
5.0.22 (2016-12-28)
New
- The query builder now supports set operations.
- Now possible to customize the width of progressbars.
Changes
- Deprecated the query convenience trait. It will be removed in Mako 5.1.0.
Bugfixes
- The image library will now show an error when trying to open a unsupported image type.
Improvements
- Various optimizations.
5.0.21 (2016-12-15)
New
- Now possible to return a status/exit code from reactor commands.
5.0.20 (2016-12-12)
Bugfixes
- Reverted breaking changes to compiled templates that were introduced in 5.0.17.
5.0.19 (2016-12-10)
Bugfixes
- CLI error handler will no longer fail when displaying a generic error message.
5.0.18 (2016-12-07)
New
- Now possible to update JSON values using the unified JSON query syntax.
- Now possible to bind parameters to raw SQL when using the query builder.
Improvements
- Various optimizations.
5.0.17 (2016-12-01)
New
- Now possible to access route parameters outside route actions.
Bugfixes
- Migration rollback now works as expected.
Improvements
- Various optimizations.
5.0.16 (2016-11-24)
Bugfixes
- Don't resolve singletons multiple times when using the container aware trait.
5.0.15 (2016-11-17)
Bugfixes
- Fixed an issue where strict reactor commands would fail when called with a "global" option.
5.0.14 (2016-11-08)
Bugfixes
- Fixed issue with Gatekeeper::forceLogin().
Improvements
- Error handler now supports xdebug.overload_var_dump.
5.0.13 (2016-11-02)
Bugfixes
- 
ORM::toArray()will no longer try to convertfalseto an array.
5.0.12 (2016-11-01)
Bugfixes
- Corrected the return type of the View::assign()method.
5.0.11 (2016-10-14)
Bugfixes
- The $shouldTouchOnInsert,$shouldTouchOnUpdateand$shouldTouchOnDeleteproperties of theTimestampedTraitnow work as expected.
Improvements
- The redis client now supports dash-separated commands.
- Checking a ORM relation with isset()will now lazy load it if it hasn't already been loaded.
5.0.10 (2016-10-11)
Bugfixes
- The redis client will no longer assume that it has recieved the data it asked for.
5.0.9 (2016-10-11)
Bugfixes
- The Redis client now reads data in 4096 byte chunks to avoid issues with large values.
5.0.8 (2016-10-11)
Changes
- 
Request::file()now returnsUploadedFileobjects.
Bugfixes
- Redis cache store is now instantiated with the configured class whitelist.
5.0.7 (2016-10-08)
New
- Added Connection::yield()andQuery::yield()methods that allow you to iterate over result sets using a generator.
5.0.6 (2016-10-06)
Bugfixes
- Fixed  Query::first()fetch mode bug.
5.0.5 (2016-10-06)
Bugfixes
- Query pagination now works as expected with distinct selections.
Improvements
- 
Query::countDistinct()now supports an array of columns names.
5.0.4 (2016-10-05)
Changes
- Simplified stack trace for JSON error responses.
5.0.3 (2016-10-05)
Bugfixes
- Query pagination now works as expected with grouping.
5.0.2 (2016-10-05)
Bugfixes
- The output escaper now accepts null values.
5.0.1 (2016-10-05)
Bugfixes
- Fixed validation bug.
5.0.0 (2016-10-04)
New
- The query builder now supports row-level locking.
- The query builder now has a unified syntax for querying JSON fields.
- New and simplified pagination functionality when using the query builder.
- Added Query::havingRaw()method.
- Added Query::orHavingRaw()method.
- Added Query::columns()method.
- Added Query::countDistinct()method.
- Added support for transaction savepoints.
- Added Collection::extend()method.
- Added cluster support to the Redis client.
- Added IPv6 support to the Redis client.
- Added support for persistent connections to the Redis client.
- Now possible to define verbatim template blocks.
- Now possible to pass extra variables to included templates.
- Custom cache stores can be added using the CacheManager::extend()method.
- Custom encrypters can be added using the CryptoManager::extend()method.
- Added IPv4 and IPv6 utilities.
- You can now set a subnet when setting the IP adresses of trusted proxies.
- The character set will automatically be added to RSS and ATOM content-type headers.
- Added support for contextual dependency injection.
- You now have to whitelist the classes you want the framework to deserialize (cache and session stores).
- Added FileSystem::hash()method.
- Added FileSystem::hmac()method.
- Added app.generate_keycommand that can be used to generate secure encryption keys.
- Added unordered list CLI output helper.
- Added ordered list CLI output helper.
- Added Output::clear()method.
- Reactor will now suggest a task or option name if an invalid one is used.
- Added support for strict commands.
- Added FireTrait that makes it easier to call a command from within a command.
Changes
- 
Query::null()has been renamed toQuery::isNull().
- 
Query::orNull()has been renamed toQuery::orIsNull().
- 
Query::notNull()has been renamed toQuery::isNotNull().
- 
Query::orNotNull()has been renamed toQuery::orIsNotNull().
- 
Query::all()now returns a result set instead of an array.
- ORM read-only functionality is now handled using a trait.
- The ORM::isReadOnly()method has been removed.
- ORM records will no longer be made read-only when using joins.
- ORM values can now be casted to intergers using intinstead ofinteger.
- ORM values can now be casted to booleans using boolinstead ofboolean.
- An exception will be thrown when trying to get a non-existing item from collection.
- The HTML::registerTag()method has been removed. UseHTML::extend()instead.
- Routing middleware replaces route filters.
- The Routes::methods()method has been renamed toRoutes::register().
- The Route::setNamespace()method has been renamed toRoute::namespace().
- The Controller::beforeFilter()has been renamed toController::beforeAction().
- The Controller::afterFilter()has been renamed toController::afterAction().
- Custom view renderers must now be added using the ViewFactory::extend()method.
- Removed the APCandXCachecache stores.
- Removed the Response::file()method.
- Removed the Response::stream()method.
- Removed the Response::redirect()method .
- Removed the Response::back()method.
- Added a ControllerHelperTrait with the following methods: fileResponse,streamResponse,redirectResponse,jsonResponseandjsonpReponse.
- Removed the MCRYPT encrypter.
- Removed the Crypto::encryptAndSign()andCrypto::validateAndDecrypt()methods. All encrypted data is now signed and validated by default.
- Renamed FileSystem::includeFile()toFileSystem::include().
- Renamed FileSystem::requireFile()toFileSystem::require().
- Renamed FileSystem::includeFileOnce()toFileSystem::includeOnce().
- Renamed FileSystem::requireFileOnce()toFileSystem::requireOnce().
- Renamed FileSystem::isDirectoryEmpty()toFileSystem::isEmpty().
- Renamed FileSystem::exists()toFileSystem::has().
- Renamed FileSystem::delete()toFileSystem::remove().
- Renamed FileSystem::getContents()toFileSystem::get().
- Renamed FileSystem::putContents()toFileSystem::put().
- Renamed FileSystem::prependContents()toFileSystem::prepend().
- Renamed FileSystem::appendContents()toFileSystem::append().
- Renamed FileSystem::truncateContents()toFileSystem::truncate().
Improvements
- Miscellaneous improvements and optimizations.
Mako 5.0 is a major version update that contains a few minor breaking changes. Make sure to read the upgrade instructions!
4.5.14 (2016-08-30)
Bugfixes
- Fixed the docblock return type for CacheManager::instance().
4.5.13 (2016-08-09)
Improvements
- 
Container::call()now supports function calls in addition to closure and method calls.
4.5.12 (2016-08-02)
Bugfixes
- 
URLBuilder::toRoute()will now allow falsy parameters (0, 0.0, '0').
4.5.11 (2016-06-29)
Bugfixes
- Fixed a leap year related bug in the Timeclass.
Improvements
- Less restrictive version requirements of third party libraries.
4.5.10 (2016-02-03)
Improvements
- Cache will now throw an exception if the store is unavailable.
4.5.9 (2015-11-26)
Bugfixes
- ETag caching will now work as expected when using mod_deflate with Apache > 2.4.0.
Improvements
- Better support for routes containing multibyte characters.
4.5.8 (2015-11-17)
Improvements
- PHP7 compatibility.
4.5.7 (2015-11-04)
Bugfixes
- The query builder can now generate working SQLite queries with an INclause where the values come from a subquery.
- The beforeandaftervalidation filters will now work as expected.
Improvements
- The query builder now supports joins with nested conditions.
4.3.5, 4.4.6 (2015-11-04)
Bugfixes
- The beforeandaftervalidation filters will now work as expected.
4.5.6 (2015-09-11)
Improvements
- Only include pagesarray in pagination data whenmax_page_links> 0.
4.5.5 (2015-07-08)
Bugfixes
- Clean URLs should now work as expected when using the local development server.
4.5.4 (2015-06-17)
Bugfixes
- The progress bar will no longer fail when 0is passed as the item count.
Improvements
- Better parameter binding for prepared statements.
This update requires you to change the data type of the
users.bannedandusers.activatedfields fromSETtoBOOL(orTINYINT(1)).
4.5.3 (2015-05-07)
Changes
- The Pagination::paginate()method is now public.
4.5.2 (2015-04-24)
Bugfixes
- Eager loading criteria now work as expected when eager loading in chunks.
4.5.1 (2015-04-20)
Bugfixes
- Now possible to eager load more than 1000 unique ids when using SQLite and Oracle (#151).
4.5.0 (2015-04-15)
New
- Now possible to send multiple headers with the same field-name.
- Added Request::getRoute()method.
- Added Response::hasHeader()method.
- Added Response::hasCookie()method.
- Added Response::removeCookie()method.
- Added Image::getHeight()method.
- Added Image::getWidth()method.
- Added Image::getDimensions()method.
- Added brute force throttling to the Gatekeeper library.
- Added a command bus library #138.
- New and improved event handler.
Changes
- 
Str::slug()will now encode non-ascii characters as recommened by RFC-3986.
- Minor changes in the application and package directory structures.
- Added brute force throttling settings to the app/config/gatekeeper.phpconfiguration file.
- Added 3 new fields to the gatekeeper users table.
Improvements
- Now possible to select a custom set of columns through a many-to-many relation.
- Various optimizations.
This release comes with a few minor breaking changes. Check out the migration guide here.
4.4.5 (2015-03-06)
Bugfixes
- Fixed bug in app.routescommand.
4.3.4, 4.4.4 (2015-02-19)
Bugfixes
- Fixed language cache issue.
4.4.3 (2015-02-04)
Improvements
- 
Query::column()andQuery::first()will now generate a more optimized query.
4.4.2 (2015-02-03)
Improvements
- The command line error handler will now include the error location in the output.
4.4.1 (2015-02-02)
New
- Added Output::setFormatter()method.
- Added Output::isMuted()method.
Bugfixes
- The redis client will no longer try to authenticate when no password is provided.
Improvements
- Controllers no longer need to extend the Mako base controller.
- Global reactor options are now sorted alphabetically.
- You can now separate package booting into core,webandcli.
This update requires a small change to the
app/config/application.phpconfiguration file.
4.4.0 (2015-01-26)
New
- Brand new reactor command line tool.
- Added optional $columnparameter to theQuery::column()method.
- Added Mako core class.
- Added Password::needsRehash()method.
- Added Request::isSafe()method.
- Added Session::getToken()method.
- Added Session::regenerateToken()method.
- Added Session::validateToken()method.
- Added tokenvalidation rule.
- Gatekeeper will automatically rehash passwords if needed.
- Added attribute,css,urlandjsescaping filters.
- Escape filters are now also available in plain PHP views.
Changes
- Moved init.phpfile from the framework core to the application.
- Removed the MAKO_VERSIONconstant (useMako::VERSIONinstead).
- Removed the Password::isLegacyHash()method.
- Removed the $legacyCheckparameter from thePassword::validate()method.
- Renamed Session::generateToken()method toSession::generateOneTimeToken.
- Renamed Session::validateToken()method toSession::validateOneTimeToken.
- Renamed tokenvalidation rule toone_time_token.
This release comes with a few minor breaking changes. Check out the migration guide here.
4.0.11, 4.1.5, 4.2.3, 4.3.3 (2015-01-19)
Bugfixes
- Gatekeeper will use the provided "auth_key" configuration value.
4.3.2 (2014-12-07)
Bugfixes
- Fixed validation bug.
4.3.1 (2014-12-02)
Bugfixes
- Fixed routing bug.
4.3.0 (2014-11-27)
New
- Added ViewFactory::exists()method.
- Views are now cascading. This means that you can override package views in your application.
- Language files are now cascading. This means that you can override package language files in your application.
- Mako now includes default 403, 404, 405 error views that can easily be overriden.
- The ORM will now also forward non-static calls to the query builder.
- Added Connection::table()convenience method.
- Added Container::call()method (#116).
- Route actions are now executed by the Container::call()method (#118).
- Route filters are now executed by the Container::call()method (#119).
- Added a session NULL store.
Changes
- Moved all http exceptions to the mako\http\exceptionsnamespace.
- Renamed the PageNotFoundExceptiontoNotFoundException.
- Controllers, Tasks and Migrations now use the ContainerAwareTraittrait by default.
- The ORM::builder()method is now public.
- The Route::constraints()method has been renamed toRoute::when().
This release comes with a few minor breaking changes. Check out the migration guide here.
4.0.10, 4.1.4, 4.2.2 (2014-11-21)
Bugfixes
- Fixed query builder bug.
4.0.9, 4.1.3, 4.2.1 (2014-11-14)
Bugfixes
- Fixed MCrypt autoloading issue (#120).
4.2.0 (2014-09-26)
New
- Added Time::formatLocalizedmethod.
- Added TimeZoneclass.
- Added a Stopwatch class (#113).
- Added support for nested template extension.
- Added optional migration descriptions.
- Added rendershortcut method to the view factory class.
- It is now possible to configure Gatekeeper to identify users using their username instead of their email.
Changes
- The Timeclass has been moved to the tomako\chrononamespace.
- The localeconfig option has been removed. You now have to set the appropriate locale for each language instead.
- The ViewFactory::createmethod will now return an instance ofmako\view\Viewinstead of an implementation ofmako\view\renderers\RendererInterface.
- Moved app/routes.phptoapp/routing/routes.php.
- Filters must now be defined in app/routing/filters.php.
- You can now use class filters in addition to closures.
- The UrlBuilder::currentmethod will now include the current query parameters by default.
- Default Mcrypt encryption mode changed from ECB to CBC.
- Removed the app/packagesdirectory. Packages will now be installed in the packagist vendor directory.
- Removed the global helper functions. They have been replaced with a trait and a class (NamespacedFileLoaderTrait and ClassInspector).
This release comes with a few minor breaking changes. Check out the migration guide here.
4.1.2 (2014-09-05)
Bugfixes
- Fixed issue with date casting in the ORM.
4.0.8, 4.1.1 (2014-09-01)
Bugfixes
- Added missing returns in gatekeeper user implementation.
4.1.0 (2014-08-20)
New
- Added sepia filter to the image library.
- Added negate filter to the image library.
- Added pixelate filter to the image library.
- Added brightness adjustment to the image library.
- Added sharpening to the image library.
- Now possible to create and restore temporary snapshots when using the image library.
- Added support for language caching.
- Added Connection::isAlive() method.
- Added Connection::reconnect() method.
- Added Connection::beginTransaction() method.
- Added Connection::commitTransaction() method.
- Added Connection::rollBackTransaction() method.
- Added Connection::getTransactionNestingLevel() method.
- Added Connection::inTransaction() method.
- It is now possible to configure the ORM to automatically typecast values.
- PageNotFoundExceptions now includes the request method and path (#108).
- Now possible to register custom view renderers without having to implement a custom view factory.
- Added Application::isCommandLine() method.
- Added ErrorHandler::disableLoggingFor() method.
Changes
- The logger and errorHandler services are no longer required for an application to work.
- Removed the the ORM::$dateTimeColumms property. Use the new typecast feature instead.
- Selecting specific columns when using the ORM will no longer make the records read-only. Joining however, will do.
You must also add the
language_cachekey to your application configuration file.
4.0.7 (2014-08-18)
New
- Now possible to configure the date output format when converting ORM records to array and/or json.
Bugfixes
- Escape exception message in debug template.
4.0.6 (2014-08-5)
Improvements
- Improved ORM::toArray() and ORM::toJson methods.
4.0.5 (2014-07-24)
Bugfixes
- Fixed bug in the file based cache store.
4.0.4 (2014-07-04)
Bugfixes
- Image library now uses the correct image quality when saving.
- Image library watermarking now works as expected.
4.0.3 (2014-07-02)
Improvements
- The error handler is no longer loading external JavaScript libraries.
4.0.2 (2014-07-01)
Changes
- Namespaced the helper functions to avoild naming collisions with global functions.
Bugfixes
- Added mako\get_class_traits()helper function to improve detection of trait usage.
4.0.1 (2014-06-26)
Bugfixes
- Fixed bug where User::isMemberOf would return NULL if group id was used instead of group name.
4.0.0 (2014-06-26)
Mako 4.0.0 is a complete rewrite where the main focus has been on improving testability, extensibility, security and the overall quality of the framework.
Mako 4 also includes a bunch of new features. Here are some of them:
- A new and improved RESTful routing system
- A brand new authentication library
- A smart and easy to use dependecy injection container
- Timestamped and OptimisticLocking traits for the ORM
- An image manipulation library that supports both GD and ImageMagick
Check out the documentation for the full list of changes.
Note that this is
NOTa one step upgrade but the API changes have been kept to a minimum so upgrading a project from Mako 3.6.x shouldn't pose too many problems.