Changelog


5.1.1 (2017-01-17)

Update using composer update.

Change type Change description
CHANGE JSONP responses are now handled by the JSON response builder.

5.1.0 (2017-01-16)

Update using composer update.

Change type Change description
NEW Added a optional NullableTrait to the ORM.
NEW Added Command::STATUS_SUCCESS constant.
NEW Added Command::STATUS_ERROR constant.
NEW Added cache.remove command.
NEW Added cache.clear command.
NEW Added application.base_url config key.
NEW Now possible to set middleware priority.
NEW The ORM now allows you to configure the foreign key name using the $foreignKeyName property.
CHANGE The response class will no longer auto render views. Views should be rendered in the controller.
CHANGE Removed the query convenience trait.
CHANGE Removed support for "piped" validation rules.
CHANGE New syntax for passing parameters to middleware.
CHANGE New syntax for passing parameters to validation rules.
BUGFIX 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)

Update using composer update.

Change type Change description
BUGFIX Query compiler will now properly escape JSON path segments.
BUGFIX MySQL query compiler will now unquote extracted JSON values.

5.0.22 (2016-12-28)

Update using composer update.

Change type Change description
NEW The query builder now supports set operations.
NEW Now possible to customize the width of progressbars.
BUGFIX Image library will now show an error when trying to open a unsupported image type.
CHANGE Deprecated the query convenience trait. It will be removed in Mako 5.1.0.
IMPROVEMENT Optimizations.

5.0.21 (2016-12-15)

Update using composer update.

Change type Change description
NEW Now possible to return a status/exit code from reactor commands.

5.0.20 (2016-12-12)

Update using composer update.

Change type Change description
BUGFIX Reverted breaking changes to compiled templates that were introduced in 5.0.17.

5.0.19 (2016-12-10)

Update using composer update.

Change type Change description
BUGFIX CLI error handler will no longer fail when displaying a generic error message.

5.0.18 (2016-12-07)

Update using composer update.

Change type Change description
NEW Now possible to update JSON values using the unified JSON query syntax.
NEW Now possible to bind parameters to raw SQL when using the query builder.
IMPROVEMENT Optimizations.

5.0.17 (2016-12-01)

Update using composer update.

Change type Change description
BUGFIX Migration rollback now works as expected.
NEW Now possible to access route parameters outside route actions.
IMPROVEMENT Optimizations.

5.0.16 (2016-11-24)

Update using composer update.

Change type Change description
BUGFIX Don't resolve singletons multiple times when using the container aware trait.

5.0.15 (2016-11-17)

Update using composer update.

Change type Change description
BUGFIX Fixed an issue where strict reactor commands would fail when called with a "global" option.

5.0.14 (2016-11-08)

Update using composer update.

Change type Change description
BUGFIX Fixed issue with Gatekeeper::forceLogin().
IMPROVEMENT Error handler now supports xdebug.overload_var_dump.

5.0.13 (2016-11-02)

Update using composer update.

Change type Change description
BUGFIX ORM::toArray() will no longer try to convert false to an array.

5.0.12 (2016-11-01)

Update using composer update.

Change type Change description
BUGFIX Corrected the return type of the View::assign() method.

5.0.11 (2016-10-14)

Update using composer update.

Change type Change description
BUGFIX The $shouldTouchOnInsert, $shouldTouchOnUpdate and $shouldTouchOnDelete properties of the TimestampedTrait now work as expected.
IMPROVEMENT The redis client now supports dash-separated commands.
IMPROVEMENT Checking a ORM relation with isset() will now lazy load it if it hasn't already been loaded.

5.0.10 (2016-10-11)

Update using composer update.

Change type Change description
BUGFIX The redis client will no longer assume that it has recieved the data it asked for.

5.0.9 (2016-10-11)

Update using composer update.

Change type Change description
BUGFIX The Redis client now reads data in 4096 byte chunks to avoid issues with large values.

5.0.8 (2016-10-11)

Update using composer update.

Change type Change description
BUGFIX Redis cache store is now instantiated with the configured class whitelist.
IMPROVEMENT Request::file() now returns UploadedFile objects.

5.0.7 (2016-10-08)

Update using composer update.

Change type Change description
NEW Added Connection::yield() and Query::yield() methods that allow you to iterate over result sets using a generator.

5.0.6 (2016-10-06)

Update using composer update.

Change type Change description
BUGFIX Fixed Query::first() fetch mode bug.

5.0.5 (2016-10-06)

Update using composer update.

Change type Change description
BUGFIX Query pagination now works as expected with distinct selections.
IMPROVEMENT Query::countDistinct() now supports an array of columns names.

5.0.4 (2016-10-05)

Update using composer update.

Change type Change description
CHANGE Simplified stack trace for JSON error responses.

5.0.3 (2016-10-05)

Update using composer update.

Change type Change description
BUGFIX Query pagination now works as expected with grouping.

5.0.2 (2016-10-05)

Update using composer update.

Change type Change description
BUGFIX The output escaper now accepts null values.

5.0.1 (2016-10-05)

Update using composer update.

Change type Change description
BUGFIX Fixed validation bug.

5.0.0 (2016-10-04)

Update using composer update.

Change type Change description
CHANGE Query::null() has been renamed to Query::isNull().
CHANGE Query::orNull() has been renamed to Query::orIsNull().
CHANGE Query::notNull() has been renamed to Query::isNotNull().
CHANGE Query::orNotNull() has been renamed to Query::orIsNotNull().
CHANGE Query::all() now returns a result set instead of an array.
NEW The query builder now supports row-level locking.
NEW The query builder now has a unified syntax for querying JSON fields.
NEW New and simplified pagination functionality when using the query builder.
NEW Added Query::havingRaw() method.
NEW Added Query::orHavingRaw() method.
NEW Added Query::columns() method.
NEW Added Query::countDistinct() method.
NEW Added support for transaction savepoints.
CHANGE ORM read-only functionality is now handled using a trait.
CHANGE The ORM::isReadOnly() method has been removed.
CHANGE ORM records will no longer be made read-only when using joins.
CHANGE ORM values can now be casted to intergers using int instead of integer.
CHANGE ORM values can now be casted to booleans using bool instead of boolean.
CHANGE An exception will be thrown when trying to get a non-existing item from collection.
NEW Added Collection::extend() method.
CHANGE The HTML::registerTag() method has been removed. Use HTML::extend() instead.
CHANGE Routing middleware replaces route filters.
CHANGE The Routes::methods() method has been renamed to Routes::register().
CHANGE The Route::setNamespace() method has been renamed to Route::namespace().
CHANGE The Controller::beforeFilter() has been renamed to Controller::beforeAction().
CHANGE The Controller::afterFilter() has been renamed to Controller::afterAction().
NEW Added cluster support to the Redis client.
NEW Added IPv6 support to the Redis client.
NEW Added support for persistent connections to the Redis client.
NEW Now possible to define verbatim template blocks.
NEW Now possible to pass extra variables to included templates.
CHANGE Custom view renderes must now be added using the ViewFactory::extend() method.
NEW Custom cache stores can be added using the CacheManager::extend() method.
NEW Custom encrypters can be added using the CryptoManager::extend() method.
CHANGE Removed the APC and XCache cache stores.
NEW Added IPv4 and IPv6 utilities. 
NEW You can now set a subnet when setting the IP adresses of trusted proxies.
CHANGE Removed the Response::file() method.
CHANGE Removed the Response::stream() method.
CHANGE Removed the Response::redirect() method .
CHANGE Removed the Response::back() method.
NEW The character set will automatically be added to RSS and ATOM content-type headers.
NEW Added a ControllerHelperTrait with the following methods: fileResponse, streamResponse, redirectResponse, jsonResponse and jsonpReponse.
NEW Added support for contextual dependency injection.
NEW You now have to whitelist the classes you want the framework to deserialize (cache and session stores).
CHANGE Removed the MCRYPT encrypter.
CHANGE Removed the Crypto::encryptAndSign() and Crypto::validateAndDecrypt() methods. All encrypted data is now signed and validated by default.
CHANGE Renamed FileSystem::includeFile() to FileSystem::include().
CHANGE Renamed FileSystem::requireFile() to FileSystem::require().
CHANGE Renamed FileSystem::includeFileOnce() to FileSystem::includeOnce().
CHANGE Renamed FileSystem::requireFileOnce() to FileSystem::requireOnce().
CHANGE Renamed FileSystem::isDirectoryEmpty() to FileSystem::isEmpty().
CHANGE Renamed FileSystem::exists() to FileSystem::has().
CHANGE Renamed FileSystem::delete() to FileSystem::remove().
CHANGE Renamed FileSystem::getContents() to FileSystem::get().
CHANGE Renamed FileSystem::putContents() to FileSystem::put().
CHANGE Renamed FileSystem::prependContents() to FileSystem::prepend().
CHANGE Renamed FileSystem::appendContents() to FileSystem::append().
CHANGE Renamed FileSystem::truncateContents() to FileSystem::truncate().
NEW Added FileSystem::hash() method.
NEW Added FileSystem::hmac() method.
NEW Added app.generate_key command that can be used to generate secure encryption keys.
NEW Added unordered list CLI output helper.
NEW Added ordered list CLI output helper.
NEW Added Output::clear() method.
NEW Reactor will now suggest a task or option name if an invalid one is used.
NEW Added support for strict commands.
NEW Added FireTrait that makes it easier to call a command from within a command.
IMPROVEMENT 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)

Update using composer update.

Change type Change description
BUGFIX Fixed the docblock return type for CacheManager::instance().

4.5.13 (2016-08-09)

Update using composer update.

Change type Change description
IMPROVEMENT Container::call() now supports function calls in addition to closure and method calls.

4.5.12 (2016-08-02)

Update using composer update.

Change type Change description
BUGFIX URLBuilder::toRoute() will now allow falsy parameters (0, 0.0, '0').

4.5.11 (2016-06-29)

Update using composer update.

Change type Change description
BUGFIX Fixed a leap year related bug in the Time class.
IMPROVEMENT Less restrictive version requirements of third party libraries.

4.5.10 (2016-02-03)

Update using composer update.

Change type Change description
IMPROVEMENT Cache will now throw an exception if the store is unavailable.

4.5.9 (2015-11-26)

Update using composer update.

Change type Change description
IMPROVEMENT Better support for routes containing multibyte characters.
BUGFIX ETag caching will now work as expected when using mod_deflate with Apache > 2.4.0.

4.5.8 (2015-11-17)

Update using composer update.

Change type Change description
IMPROVEMENT PHP7 compatibility.

4.5.7 (2015-11-04)

Update using composer update.

Change type Change description
IMPROVEMENT The query builder now supports joins with nested conditions.
BUGFIX The query builder can now generate working SQLite queries with an IN clause where the values come from a subquery.
BUGFIX The before and after validation filters will now work as expected.

4.3.5, 4.4.6 (2015-11-04)

Update using composer update.

Change type Change description
BUGFIX The before and after validation filters will now work as expected.

4.5.6 (2015-09-11)

Update using composer update.

Change type Change description
IMPROVEMENT Only include pages array in pagination data when max_page_links > 0.

4.5.5 (2015-07-08)

Update using composer update.

Change type Change description
BUGFIX Clean URLs should now work as expected when using the local development server.

4.5.4 (2015-06-17)

Update using composer update.

Change type Change description
IMPROVEMENT Better parameter binding for prepared statements.
BUGFIX The progress bar will no longer fail when 0 is passed as the item count.

This update requires you to change the data type of the users.banned and users.activated fields from SET to BOOL (or TINYINT(1)).


4.5.3 (2015-05-07)

Update using composer update.

Change type Change description
IMPROVEMENT The Pagination::paginate() method is now public.

4.5.2 (2015-04-24)

Update using composer update.

Change type Change description
BUGFIX Eager loading criteria now work as expected when eager loading in chunks.

4.5.1 (2015-04-20)

Update using composer update.

Change type Change description
BUGFIX Now possible to eager load more than 1000 unique ids when using SQLite and Oracle (#151).

4.5.0 (2015-04-15)

Update using composer update.

Change type Change description
NEW Now possible to send multiple headers with the same field-name.
NEW Added Request::getRoute() method.
NEW Added Response::hasHeader() method.
NEW Added Response::hasCookie() method.
NEW Added Response::removeCookie() method.
NEW Added Image::getHeight() method.
NEW Added Image::getWidth() method.
NEW Added Image::getDimensions() method.
NEW Added brute force throttling to the Gatekeeper library.
NEW Added a command bus library #138.
NEW New and improved event handler.
IMPROVEMENT Now possible to select a custom set of columns through a many-to-many relation.
IMPROVEMENT Various optimizations.
CHANGE Str::slug() will now encode non-ascii characters as recommened by RFC-3986.
CHANGE Minor changes in the application and package directory structures.
CHANGE Added brute force throttling settings to the app/config/gatekeeper.php configuration file.
CHANGE Added 3 new fields to the gatekeeper users table.

This release comes with a few minor breaking changes. Check out the migration guide here.


4.4.5 (2015-03-06)

Update using composer update.

Change type Change description
BUGFIX Fixed bug in app.routes command.

4.3.4, 4.4.4 (2015-02-19)

Update using composer update.

Change type Change description
BUGFIX Fixed language cache issue.

4.4.3 (2015-02-04)

Update using composer update.

Change type Change description
IMPROVEMENT Query::column() and Query::first() will now be a lot faster in some situations.

4.4.2 (2015-02-03)

Update using composer update.

Change type Change description
IMPROVEMENT The command line error handler will now include the error location in the output.

4.4.1 (2015-02-02)

Update using composer update.

Change type Change description
NEW Added Output::setFormatter() method.
NEW Added Output::isMuted() method.
IMPROVEMENT Controllers no longer need to extend the Mako base controller.
IMPROVEMENT Global reactor options are now sorted alphabetically.
IMPROVEMENT You can now separate package booting into core, web and cli.
BUGFIX The redis client will no longer try to authenticate when no password is provided.

This update requires a small change to the app/config/application.php configuration file.


4.4.0 (2015-01-26)

Update using composer update.

Change type Change description
NEW Brand new reactor command line tool.
NEW Added optional $column parameter to the Query::column() method.
NEW Added Mako core class.
NEW Added Password::needsRehash() method.
NEW Added Request::isSafe() method.
NEW Added Session::getToken() method.
NEW Added Session::regenerateToken() method.
NEW Added Session::validateToken() method.
NEW Added token validation rule.
NEW Gatekeeper will automatically rehash passwords if needed.
NEW Added attribute, css, url and js escaping filters.
NEW Escape filters are now also available in plain PHP views.
CHANGE Moved init.php file from the framework core to the application.
CHANGE Removed the MAKO_VERSION constant (use Mako::VERSION instead).
CHANGE Removed the Password::isLegacyHash() method.
CHANGE Removed the $legacyCheck parameter from the Password::validate() method.
CHANGE Renamed Session::generateToken() method to Session::generateOneTimeToken.
CHANGE Renamed Session::validateToken() method to Session::validateOneTimeToken.
CHANGE Renamed token validation rule to one_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)

Update using composer update.

Change type Change description
BUGFIX Gatekeeper will use the provided "auth_key" configuration value.

4.3.2 (2014-12-07)

Update using composer update.

Change type Change description
BUGFIX Fixed validation bug.

4.3.1 (2014-12-02)

Update using composer update.

Change type Change description
BUGFIX Fixed routing bug.

4.3.0 (2014-11-27)

Update using composer update.

Change type Change description
NEW Added ViewFactory::exists() method.
NEW Views are now cascading. This means that you can override package views in your application.
NEW Language files are now cascading. This means that you can override package language files in your application.
NEW Added a ForbiddenException.
NEW Mako now includes default 403, 404, 405 error views that can easily be overriden.
NEW The ORM will now also forward non-static calls to the query builder.
NEW Added Connection::table() convenience method.
NEW Added Container::call() method (#116).
NEW Route actions are now executed by the Container::call() method (#118).
NEW Route filters are now executed by the Container::call() method (#119).
NEW Added a session NULL store.
CHANGE Moved all http exceptions to the mako\http\exceptions namespace.
CHANGE Renamed the PageNotFoundException to NotFoundException.
CHANGE Controllers, Tasks and Migrations now use the ContainerAwareTrait trait by default.
CHANGE The ORM::builder() method is now public.
CHANGE The Route::constraints() method has been renamed to Route::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)

Update using composer update.

Change type Change description
BUGFIX Fixed query builder bug.

4.0.9, 4.1.3, 4.2.1 (2014-11-14)

Update using composer update.

Change type Change description
BUGFIX Fixed MCrypt autoloading issue (#120)

4.2.0 (2014-09-26)

Update using composer update.

Change type Change description
NEW Added Time::formatLocalized method.
NEW Added TimeZone class.
NEW Added a Stopwatch class (#113)
NEW Added support for nested template extension.
NEW Added optional migration descriptions.
NEW Added render shortcut method to the view factory class.
NEW It is now possible to configure Gatekeeper to identify users using their username instead of their email.
CHANGE The Time class has been moved to the to mako\chrono namespace.
CHANGE The locale config option has been removed. You now have to set the appropriate locale for each language instead.
CHANGE The ViewFactory::create method will now return an instance of mako\view\View instead of an implementation of mako\view\renderers\RendererInterface.
CHANGE Moved app/routes.php to app/routing/routes.php.
CHANGE Filters must now be defined in app/routing/filters.php.
CHANGE You can now use class filters in addition to closures.
CHANGE The UrlBuilder::current method will now include the current query parameters by default.
CHANGE Default Mcrypt encryption mode changed from ECB to CBC.
CHANGE Removed the app/packages directory. Packages will now be installed in the packagist vendor directory.
CHANGE 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)

Update using composer update.

Change type Change description
BUGFIX Fixed issue with date casting in the ORM.

4.0.8, 4.1.1 (2014-09-01)

Update using composer update.

Change type Change description
BUGFIX Added missing returns in gatekeeper user implementation.

4.1.0 (2014-08-20)

Update using composer update.

Change type Change description
NEW Added sepia filter to the image library.
NEW Added negate filter to the image library.
NEW Added pixelate filter to the image library.
NEW Added brightness adjustment to the image library.
NEW Added sharpening to the image library.
NEW Now possible to create and restore temporary snapshots when using the image library.
NEW Added support for language caching.
NEW Added Connection::isAlive() method.
NEW Added Connection::reconnect() method.
NEW Added Connection::beginTransaction() method.
NEW Added Connection::commitTransaction() method.
NEW Added Connection::rollBackTransaction() method.
NEW Added Connection::getTransactionNestingLevel() method.
NEW Added Connection::inTransaction() method.
NEW It is now possible to configure the ORM to automatically typecast values.
NEW PageNotFoundExceptions now includes the request method and path (#108).
NEW Now possible to register custom view renderers without having to implement a custom view factory.
NEW Added Application::isCommandLine() method.
NEW Added ErrorHandler::disableLoggingFor() method.
CHANGE The logger and errorHandler services are no longer required for an application to work.
CHANGE Removed the the ORM::$dateTimeColumms property. Use the new typecast feature instead.
CHANGE 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_cache key to your application configuration file.


4.0.7 (2014-08-18)

Update using composer update.

Change type Change description
BUGFIX Escape exception message in debug template.
NEW Now possible to configure the date output format when converting ORM records to array and/or json.

4.0.6 (2014-08-5)

Update using composer update.

Change type Change description
IMPROVEMENT Improved ORM::toArray() and ORM::toJson methods.

4.0.5 (2014-07-24)

Update using composer update.

Change type Change description
BUGFIX Fixed bug in the file based cache store.

4.0.4 (2014-07-04)

Update using composer update.

Change type Change description
BUGFIX Image library now uses the correct image quality when saving.
BUGFIX Image library watermarking now works as expected.

4.0.3 (2014-07-02)

Update using composer update.

Change type Change description
IMPROVEMENT Errorhandler is no longer loading external JavaScript libraries.

4.0.2 (2014-07-01)

Update using composer update.

Change type Change description
CHANGE Namespaced the helper functions to avoild naming collisions with global functions.
BUGFIX Added mako\get_class_traits() helper function to improve detection of trait usage.

4.0.1 (2014-06-26)

Update using composer update.

Change type Change description
BUGFIX 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 NOT a 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.

Top