Blog and News

Phalcon 2 (beta 1) released!

Eight months ago we announced the creation of a new high-level compiled language called Zephir which we used to completely rewrite Phalcon 2.0.

Zephir’s purpose is to offer a new and easier syntax of writing PHP extensions, translating its PHP/JS inspired syntax to C instructions and thus allowing more and more developers to be involved with the project. In addition, it offers the ability to create new PHP extensions without the need to know C or any of the PHP internals.

For us and thanks to Zephir, the development of Phalcon is now more enjoyable. We have to deal less and less with low-level details and our base code is more readable for anyone who wants to understand, contribute and improve Phalcon.

During these we have been implemented several interesting features in Zephir, that have enriched the quality of Phalcon and have made the development more robust:

The result of all this hard work is now available for all to use. Today, we are excited to announce the release of Phalcon 2 beta 1!

To showcase our trust in our work, the following Phalcon powered software uses Phalcon 2.0:

Official WebSite

image

The official Phalcon website was one of the first Phalcon applications that we have focused on, to make sure that the Phalcon 2.0 code base is compatible with it and thus compatible with Phalcon 1.x.

Today, it runs entirely on Phalcon 2.0. If you have visited our site in the last few days, you have contributed in testing Phalcon 2.0.

INVO

image

INVO was the first application we launched several months ago to show how an application can be created using Phalcon. It’s also now fully compatible with Phalcon 2.0.

Phosphorum

image

Phosphorum is the software that powers our discussion forum. Everyone that has used Phosphorum in the last couple of weeks has been using an application that is powered by Phalcon 2.0 in production!

Is Phalcon 2/Zephir ready?

All the functionality available in Phalcon 1.x has not yet been completely migrated to Phalcon 2.0. For example, only support for MySQL is available with regards to database adapters at the moment. Other adapters are missing but they will be implemented in the very near future.

There are for sure some bugs and issues to resolve and we need to enhance the test suite to cover more of the code base. However we are confident that with your help we will achieve a stable version very soon.

Regarding Zephir, while the progress made is quite significant, there is much work to do as with any language:

  • Increase stability
  • Improve documentation
  • Increase debuggability
  • Improve performance in certain scenarios, etc.

With the contributions of the community and the use case available through Phalcon 2.0, Zephir will undoubtedly evolve even more.

Help with Testing

This version can be installed from the 2.0.0 branch:


git clone http://github.com/phalcon/cphalcon
git checkout 2.0.0
cd ext
sudo ./install

We welcome your comments regarding this new release. If you discover any bugs, please (if possible) create a failing test and submit a pull request, alongside with an issue on Github.

Want to contribute?

The simplest way is to look through the issue tracker for issues or features to implement. Also fixing the necessary code to make some unit-tests pass on Phalcon 2.0 would help a lot.

Next Steps

While with the help of Zephir the maintenance of Phalcon 2.0’s code should be much easier now, we know that it could be even better. One disadvantage of the compiled languages in a large code base, such as Phalcon’s, is that compilation takes away several seconds and introduces undesired pauses in the development.

That is why we recently started developing something called Zephir “Runtime”. With all the experience we have acquired over the last few years and following the same philosophy we used on the code generation in the Zephir AOT, started to implement a JIT compiler for Zephir.

This JIT compiler will aid in making development and testing with Zephir much faster and in the long run become an alternative to the Zephir compiler itself, achieving similar or better performance depending on the scenario.

Zephir Runtime is still in its infancy and right now only supports a minimal subset of the Zephir language.

The following video shows how it works:

As you can see, there is no need to invoke the Zephir compiler so as to recompile your extension after changes were made. Just by refreshing the page, the Zephir code is compiled on-the-fly using LLVM as backend.

Zephir Runtime is still in the earliest stages and we’re hopeful that by announcing it early in its lifecycle and open-sourcing the code, we can collaborate with the community throughout its development.

We hope you all have enjoyed these great news, in the next few weeks we will be announcing new betas and more news.

Thank you!

<3 The Phalcon Team

Phalcon Community Hangout

Yesterday (2014-04-05) we had our first Phalcon community hangout. The main purpose of the hangout was to meet the community, discuss about what Phalcon is and what our future steps are, and hear news, concerns, success stories from the community itself.

We are excited to announce that the first Phalcon community hangout was a great success!

We had an awesome turnout from all around the world, with members of the community filling the hangout (10 concurrent users) and more viewing online, asking questions and interacting with the team.

We talked about where we are, where we came from and what the future steps are with Zephir and Phalcon 2.0. Contributions, bugs and NFRs were also topics in our discussion, as well as who are team and how Phalcon is funded.

More hangouts will be scheduled in the near future, hopefully making this a regular event for our community. We will also cater for members of the community that are not English speakers, by creating hangouts for Spanish speaking, Russian etc. The goal is to engage as many members as possible!

The love and trust you all have shown to our framework is what drives us to make it better, push performance, introduce more features and make Phalcon the best PHP framework there is. 

For those that missed it, the video is below.

<3 The Phalcon Team

image image image imageimage

Introducing “Pokémon: Phalcon Edition”

Today, we have an important announcement to make. A few weeks ago we received an interesting proposal from an important japanese video-game company. They wanted us to create a game that would help children to become interested in web programming including open source alternatives like Phalcon. We are no video-game experts by far, but we decided to give it a try and the result is simply amazing.

"Pokémon: Phalcon Edition" is a new member of this saga and it is sure to be one of the favorite of its fans.

The spokesman of this company was very excited about this new project:

We never doubted that Phalcon Team could get on track with this new project. We have rescued the art of Pokémon battle in 2D, but we have introduced elements of the web programming world. 

This game will include a new Framework Pokemon type, the 19th type of Pokemon to be introduced to the franchise. The Framework type is super effective against bugs and bad programming practices.

I can’t say more but It will certainly be one of the most exciting games of this year!

A sample of the progress of the game can be seen in the following video:

The game will be available for iOS and Android starting this summer!

Enjoy!

Update: No Pokemons were harmed in the making of that video, that was our April Fool’s Joke LOL :D

Phalcon statistics

As with any project, statistics are always good to have around. Whether this is personal curiosity or showing off, statistics help us make decisions.

For those that are wondering what languages are used to make Phalcon, below is a table that might prove helpful.

The output has been created with cloc.

--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                               361         108511          46708         327574
PHP                             255           7816           6557          35404
Bourne Shell                     14           5891           5302          34188
m4                                9           2263            882          20732
Bourne Again Shell               10           2738           4109          16963
SQL                               3            250            250          13336
C/C++ Header                    344           5653           6621          10799
yacc                              3            710             57           2032
make                              5             52              0           1065
XML                               2             15             15            119
awk                               2             15             22             70
Python                            1             20              1             53
YAML                              1              7              0             31
CSS                               2              2              0             12
Pascal                            1              4              4              4
Javascript                        2              0              0              2
--------------------------------------------------------------------------------
SUM:                           1015         133947          70528         462384
--------------------------------------------------------------------------------

C is king. However things will change once 2.0.0 is out, making Zephir the top language.

<3 The Phalcon Team

Phalcon 1.3.0 Released

Right after our 2 year celebration and several months of development, more than 1,500 commits and a lot of improvements and fixes, Phalcon 1.3 is finally released!

Many important internal aspects of Phalcon have been rewritten and enhanced without breaking compatibility with older versions.

Phalcon 1.3 consolidates the research, testing and implementation of new ways to improve the performance in the Phalcon kernel, which is also the heart of the extensions created by Zephir in Phalcon 2.0.

The CHANGELOG for this version is huge. Some key improvements are:

Disabling Literals

Literals can be disabled in PHQL, this means that directly using strings, numbers and boolean values in PHQL strings will be disallowed. In Phalcon 1.3 this option has been improved and now works with
most query builders, finders and PHQL generators.

Phalcon\Mvc\Model::setup(array('phqlLiterals' => false));

$phql = "SELECT Robots.* FROM Robots WHERE Robots.type = :type: LIMIT :limit:";

$result = $this->modelsManager->executeQuery($phql, array(
	'type' => $this->request->getPost('name')
	'limit' => $this->request->getPost('limit')
));

Registry

A widely requested by the community component, Phalcon\Registry is introduced in this version. This component implements the Registry pattern, allowing the developer to store and retrieve all kinds of values using simple keys.

$registry = new \Phalcon\Registry();

//Store a simple value
$registry->mydata = "hello";

//Store a complex resultset
$registry->robots = Robots::find();

Registries can be iterated as arrays:

foreach ($registry as $key => $value) {
	var_dump($key);
	var_dump($value);
}

And can be accessed as objects or arrays:

echo $registry->key;
echo $registry['some key'];
echo $registry[$key];
echo $registry->{$key};
echo $registry[0];
echo $registry->{0};

Ini Settings

Phalcon 1.3 introduces php.ini settings to alter the global behavior of the extension:

; Enables/Disables globally the internal events
phalcon.orm.events = On

; Enables/Disables virtual foreign keys
phalcon.orm.virtual_foreign_keys = On

; Enables/Disables column renaming
phalcon.orm.column_renaming = On

; Enables/Disables automatic NOT NULL validation
phalcon.orm.not_null_validations = On

; Enables/Disables throwing an exception if save fails
phalcon.orm.exception_on_failed_save = On

; Enables/Disables literals in PHQL
phalcon.orm.enable_literals = On

; Enables/Disables auttomatic escape
phalcon.db.escape_identifiers = On

PSR-3 Logger Implementation

Phalcon\Logger now implements the PSR-3 standard for loggers which allows this component interoperate with other frameworks that also implement this standard.

In addition to this, Phalcon optionally provides C implementations of the interfaces and traits required by this standard as part of the extension:

  • Psr\Log\LoggerInterface,
  • Psr\Log\LoggerAwareInterface,
  • Psr\Log\LogLevel,
  • Psr\Log\LoggerAwareTrait and
  • Psr\Log\LoggerTrait.

You can enable/disable them via the following php.ini directive:

phalcon.register_psr3_classes = On;

This also would allow other components implement and use these interfaces directly where Phalcon is installed.

Image Manipulation Component

A component that was conceived and implemented by our wonderful contributors Phalcon\Image is available for developers that need to manipulate images using GD or Imagemagick. A unified interface is provided to manipulate images using either library.

use Phalcon\Image\Adapter\GD as GdAdapter;
use Phalcon\Image\Adapter\Imagick as ImagickAdapter;

$image = new GdAdapter('my-logo.jpg');

$image
	->crop(200, 200)
	->resize(70, 50)
	->save('new-logo.jpg');

For now only the most commonly used functions have been unified and implemented since both libraries provide different functionality.

Performance Improvements

TLDR: Phalcon is now faster!

The following performance improvements have been implemented in this version, they are a bit technical, you can skip them if you want:

Polymorphic Function/Method cache
Functions and methods are called directly by Phalcon using C calls taking advantage that compilers know their address/location at compile time, however, others only exist temporarily at runtime and must be resolved by Phalcon in the PHP userland. Version 1.3 has introduced a cache that remembers (when possible) the location of these very dynamic functions and methods and reuse those locations in subsequent calls to the same method/function in order to improve performance.

Global constants
Some simple and constant values such as: null, false, true, 1, 0 and others, are often used by Phalcon throughout its execution cycle. Previously, these values were (in some cases) allocated or duplicated unnecessarily. Phalcon 1.3 just made one allocation per request for these values and then they are shared everywhere where they are used reducing overall memory usage.

Memory Management
A global memory tracker is used by Phalcon to track every segment of memory allocated by the framework in order to accordingly release and free that memory when required. Earlier versions of Phalcon needed to request additional memory to track those memory segment. Phalcon 1.3 does not need to do this in most execution cycles, thus improving performance.

Internal Properties
Many of the properties previously implemented classes were Phalcon PHP userland properties. Now many of them have been rewritten to take advantage of internal properties that have a much lower overhead when reading and writing. For example, Phalcon does not need to check whether the visibility of these properties is public, protected or private, the framework knows exactly whether they can be read or updated.

Hidden Symbols
Most of the symbols and names of internal functions and structures are not exported publicly anymore allowing the compiler to perform more aggressive optimizations by knowing in advance the address of functions and knowing that those will not be overridden externally.

Acknowledgments

Big kudos to main contributors on this version: Vladimir Kolesnikov, Dreamszhu, Piotr Gasiorowski and all the army of developers behind this project that make Phalcon possible:

Conclusion

We hope that you will enjoy these improvements and additions. We invite you to share your thoughts and questions about this version on Phosphorum.

Enjoy and thanks for using Phalcon!

<3 Phalcon Team

3ACEC916AE9C026594FE0562EF3013BE2CF47247
Cup Cake

We are humans. We want to better ourselves. Taking different paths and exploring new opportunities we all want to make the world a better place for everyone that lives in it.

This has been the drive of many innovators throughout the years, who, through determination and hard work, made a difference, change minds, offering tools and ideas that make our lives easier.

Two years ago (actually our two year anniversary was in January but this will do), a crazy idea was formed, to create the fastest and most feature rich PHP framework as a PHP extension.

Phalcon was born.

3ACEC916AE9C026594FE0562EF3013BE2CF47247 marks one of the first commits made in the cphalcon repository in Github, but in fact, one of the most significant because it declared our mission starting that day.

Very early days back then, extremely few followers, a lot of things to learn, many bugs and many features missing.

Since then, so many things have happened, we have been delighted to see new contributors to our project, new testers, new users and new applications every day.

Thank you all! Without you we could have not gone this far. 

Happy birthday Phalcon Project!

<3 Phalcon Team

 

Phalcon 2.0 alpha 1 released!
image

We’re very excited to announce the release of Phalcon 2.0 Alpha 1!

This release showcases yet another huge step forward in Phalcon releases.

Unlike previous versions of Phalcon, most of this version is written in Zephir. Zephir is a new language that we have been developing for several months now, which is specifically intended to ease the creation of extensions for PHP.

To demonstrate the progress we have made in this release, we are running our official site with it. You can see this here.

What’s missing?

As any alpha version you may expect bugs and missing features, however outreach this point is very important to us, since it allows for the community to get involved in with it.

  • A large number of components and classes have been migrated to Phalcon 2 from the 1.x branches. You can see the progress  here.
  • Phalcon 1.3 has important optimizations and improvements that need to be migrated and integrated into Phalcon 2.
  • Phalcon 2.0 is passing a large number of unit tests. However, more work is needed to ensure that implemented functionality is compatible with 1.x prior to introducing any major changes.

Zephir

Zephir is a high-level compiled language that we’re creating to replace development with C in most parts of Phalcon. It’s fully open sourced under the MIT license.

Thanks to the help and contributions from the community, we have made huge progress in the development of this new language. To all of you thanks!. There is still a lot of room for improvement and that is what we hope to do in the coming months.

Here are some links that may interest you if want to learn more:

Help with Testing

This version can be installed from the 2.0.0 branch:

git clone http://github.com/phalcon/cphalcon
git checkout 2.0.0
cd ext
sudo ./install-test

We welcome your comments regarding this new release. If you discover any bugs, please (if possible) create a failing test and submit a pull request, alongside with an issue on Github.

Thanks!

<3 The Phalcon Team

Phalcon 1.2.5 released

We are pleased to announce the release of Phalcon 1.2.5, the latest stable version of framework.

1.2.5 includes mostly bug fixes:

  • Http\Cookie::__toString() will not throw exceptions (#1427)
  • Phalcon\Http\Cookie::__toString() will return a string value (#1428)
  • Camelize does not ignore the last character of a string anymore (#1436)
  • APC tests do not run under CLI when apc.enable_cli is 0 (#1449)
  • Phalcon\Debug::uri now supports both http and https (#987)
  • Fixed inconsistency in Tag::stylesheetLink/javascriptInclude w.r.t. local URLs (#1486)
  • Fixed bug in Phalcon\Queue\Beanstalk::read() (#1348, #1612)
  • Phalcon\Flash\Session::getMessages() incorrectly removed all messages (#1575)
  • Fixed bug in phalcon_fix_path() (#1601)
  • Added Phalcon\Mvc\Model\Row::toArray() method (#1506)
  • Added support for POINT type in MySQL (#1536)
  • Phalcon\Mvc\Model\Validator::getOption() returns NULL if the option does not exist (#1530)
  • Fixed parsing of annotations containing / (#1480)
  • Make sure that ‘persistent’ is resolved only when accessed for the first time (#1637)
  • Fix Phalcon\Session\Bag::remove() (#1637)
  • Bug fixes in beanstalkd protocol implementation
  • Phalcon\Paginator\Adapter\Model returns correct results even when page number is incorrect (#1654)
  • Bug fix: no arguments were passed to beforeMatch handler in Phalcon\Mvc\Router (#1556)
  • Phalcon\Logger\Adapter::setLogLevel() is honored by transactions (#1716)
  • Bug fixes in Phalcon\Db\Adapter\Pdo::describeColumns() (#1562)
  • Phalcon\Session\Adapter::__destruct() now calls session_write_close() (#1624)
  • Volt: fixed bug in email_filed() (#1723)
  • Fixed PHP Notices in Phalcon\Debug::onUncaughtException() (#1683)
  • Phalcon\Logger\Adapter::commit() clears the queue (#1748)
  • Constant-time string comparison in Phalcon\Security::checkHash() (#1755)
  • Fix phalcon_escape_multi() to generate valid UTF-8 (#1681)

Phalcon 1.2.5 is now available on the master branch and DLLs are available for download in our download area. You can also access the latest documentation here.

Enjoy!

Happy new year and What’s coming

Phalcon was released more or less 2 years ago and a lot of good things have happened. Our community is growing every day, many developers are excited to see what Phalcon will bring us in this new year.

A great effort was made by the contributors last year to get here. To all of you thank you very much!

As always, bring up an open-source project represents many challenges, work and dedication. Hopefully, our plans for this year are:

  • Phalcon 2.0: Our next big release is the result of several months of work by the Phalcon Team and contributors, we still need to stabilize and fix some major bugs before releasing a beta version. The new code base is now written in a new high level language called Zephir which is friendlier and opens a new world of possibilities for Phalcon and PHP users. 
  • Documentation: Many new features were added to Phalcon in version 1.3. (See CHANGELOG). Many of these need to be addressed in the documentation to be exploited better by the community. We invite you join the documentation teams helping out with examples and explanations and thereby helping to release this version as soon and better as possible.
  • Developer Tools: Some community members are working in a better devtools version including a plugin-based architecture and a more customizable scaffold subsystem. We hope to release this soon.

We invite you to join our team of contributors and make Phalcon a better framework every day!

Happy new year!

We wish a happy new year to all Phalcon users and the whole PHP community. The Phalcon Team extend their warmest wishes to you all, and we hope this year will bring you many new projects, challenges and successes with PHP and Phalcon.

<3

Phalcon 1.3 beta 1 released!

We are happy to announce the release of our first beta of Phalcon 1.3​!

In this version we have introduced several new features and performance improvements. The intend of this beta release is get input from the community, test the new functionality making sure everything works fine once production environments are updated to 1.3.

1.3.0 includes several performance improvements, new components like Phalon\Image, bug fixes, stability and performance improvements.​

 - Code cleanup: get rid of compiler warnings, dead code elimination, code deduplication, use static code analysers to eliminate possible bugs
   (#801, #802, #810, #825, #827, #838, #849, #942, #968, #1001, #1093, #1169, #1214, #1223, #1224, #1375, #1430)
 - Fixed various memory leaks (#469, #860, #910, #914, #916, #1031, #1067, #1249, #1273, #1291, #1309, #1345, #1455, #1470)
 - Fixed memory access violations / segmentation faults / etc (#469, #849, #851, #852, #858, #860, #861, #895, #911, #918, #927, #928, #1000, #1077, #1112, #1113, #1131, #1149, #1173,
   #1272, #1284, #1302, #1340, #1343, #1368, #1369, #1371, #1376, #1379, #1392, #1451, #1466, #1485, #1494, #1501, #1504, #1509, #1567, #1607)
 - Fixed PHP notices, warnings and other incompatibilities (#894, #1222, #1315, #1413, #1427, #1428, #1529)
 - Security fixes:
   - Hardening fixes (#1044)
   - Interface validation (#1043, #1048)
   - Thorough data validation in __wakeup() (#1043, #1634, #1635)
   - Fixed XSS vulnerabilities (#1216, #1190)
   - Phalcon\Security::checkHash() allows to restrict the length of the password to avoid attacks like https://www.djangoproject.com/weblog/2013/sep/15/security/ (#1261)
   - Fixed crash while rendering element's label (#1210)
   - Prevent MongoDB Request Injection Attacks (#1265)
   - Do not allow to override superglobals in views (#1617)
 - Phalcon Kernel:
   - 32 and 64 bit hashes can be computed on the same CPU architecture (#817)
   - Reduced overall memory usage (#834, #891, #893)
   - Memory allocation optimizations (#912, #1220)
   - Faster internal array and string manipulation (#822, #823, #830, #833, #837, #890)
   - Camelize does not ignore the last character of a string anymore (#1436)
   - Fixed bug in phalcon_fix_path() (#1601)
   - Use native counterparts for memory_get_usage(), gettype(), json_encode(), json_decode(), session_XXX(), header(), headers_sent(), debug_backtrace(),
     lcfirst(), ob_XXX(), array_unshift(), array_values(), array_keys(), htmlentities() (#836, #847, #936, #945, #1099)
   - Hash funcrions tailored for object handlers (#842)
   - Optimization of calls to userland functions and methods (#843, #954)
   - Read/modify/update optimization on properties (#848)
   - Added support for self/parent/static scopes in static properties (#943)
   - Scope lookup optimizations (#948)
   - Do not restore memory frames from kernel functions (#960, #976)
   - Diagnostic messages when Phalcon is compiled in dev mode (#1009, #1054, #1097)
   - Return Value Optimization (#1046, #1047, #1075)
   - Fixed locale issue (#1095)
   - Added support for interned strings (PHP 5.4+)
   - Static property fetch/update optimization (#1293)
   - Fix misleading diagnostics on exception (#1297)
   - Use preallocated permanent zvals instead of null, true, false, 0 and 1 (#1302)
   - Bug fix in phalcon_fix_path() (#1591)
 - Phalcon\Acl:
   - Fixed broken ACL inheritance (#905)
   - Bug fix when ACL allowed access to forbidden resources (#1303)
   - Fixed bug with ACL * wildcard (#1409)
   - Fixed bug with numeric resources (#1513)
 - Phalcon\Annotations:
   - Fixed getProperty() bug in AnnotationsAdapter (#996)
   - Phalcon\Annotations optimizations (#1141)
   - Fixed parsing of annotations containing / (#1480)
 - Phalcon\Assets:
   - Fixed bugs when minifier produced no output at all (#811, #821)
   - Fixed joining issue (#951)
   - Added support for UTF-8 characters in jsmin
   - Fixed chaining of CSS/JS filters (#1198)
   - Phalcon\Assets\Filters\CssMin and JsMin implement Phalcon\Assets\FilterInterface (#1539)
   - Added Phalcon\Assets\Collection::setTargetLocal() (#1532)
 - Phalcon\Cache:
   - Added Libmemcached cache backend (#913)
   - Added support for APCu 4.0.2+ (#1234)
   - Implemented Phalcon\Cache\Backend\Memory::queryKeys() (#1093)
   - Bug fixes in Phalcon\Cache\Backend\Xcache (#1406)
   - Phalcon\Cache\Frontend\Data optimizations (#1093)
   - Phalcon\Cache\Frontend\None optimizations (#1093)
   - Phalcon\Cache\Frontend\Base64 optimizations (#1093)
   - Phalcon\Cache\Frontend\Igbinary optimizations (#1093)
   - Phalcon\Cache\Frontend\Output optimizations (#1093)
   - Phalcon\Cache\Frontend\Json optimizations (#1093)
   - Phalcon\Cache\Backend optimizations (#1093)
   - Phalcon\Cache\Backend\Memory optimizations (#1093)
   - Phalcon\Cache\Backend\File optimizations (#1093)
   - Phalcon\Cache\Backend\Apc optimizations (#1093)
   - Phalcon\Cache\Backend\Xcache optimizations (#1093)
   - Phalcon\Cache\Backend\Memcache optimizations (#1093)
   - Phalcon\Cache\Backend\Mongo optimizations (#1093)
   - Phalcon\Cache\Backend\Libmemcached optimizations and bug fixes (#1093)
   - Added increment() and decrement() methods (#1374)
   - Added flush() method (#1352)
 - Phalcon\Config:
   - Faster Phalcon\Config implementation using object handlers (#837, #1277)
   - Phalcon\Config now support numeric properties as well (#837)
   - Implemented Phalcon\Config::offsetUnset() (#732)
   - Phalcon\Config\Adapter\Ini correctly handles empty sections and INI files without any sections (#829, #837)
   - Added Phalcon\Adapter\Config\Json class to read JSON configs (#844)
   - Phalcon\Config::merge now works with derived classes (#1024)
   - Dot-delimited directives in INI-files are now prsed correctly (#872)
   - Support for PHP arrays as config files (#1439)
 - Phalcon\Crypt:
   - Added support for various padding schemes (PKCS7, ANSI X.923, ISO 10126, ISO/IEC 7816-4, zero padding, space padding) to Phalcon\Crypt (#864, #887)
   - Reduced peak memory usage (#1237)
   - encryptBase64() and decryptBase64() can optionally use RFC 4648 flavor of BASE64 (#1353)
 - Phalcon\Db:
   - Added support for DECIMAL scale (#940)
   - Fixed invalid sequence names for PostgreSQL (#1022)
   - Added support for MySQL DOUBLE type (#1128)
   - Database dialects now support BOOLEAN data type (#816)
   - Added support for POINT type in MySQL (#1536)
   - Fixed issue with RawValue('default') on composite primary key (#1534)
 - Phalcon\Debug:
   - Added support for UTF-8 to \Phalcon\Debug (#1099)
   - Phalcon\Debug::uri now supports both http and https (#987)
   - Fixed array to string conversion notice (#1103)
   - Add support for xdebug.file_link_format (#1401)
 - Phalcon\DI:
   - Phalcon\Di optimizations (#1014)
   - Added Phalcon\Di\Service::isResolved() method (#1242)
   - Make sure that 'persistent' is resolved only when accessed for the first time (#1637)
   - Faster DI implementation by using object handlers (#1473)
 - Phalcon\Dispatcher:
   - Dispatching parameters now can be modified in 'beforeExecuteRoute' events
   - 'beforeException' events can now handle exceptions occurred when executing actions (#140)
   - Added Phalcon\Dispatcher::getHandlerClass and Phalcon\Dispatcher::getActionMethod
   - Implemented afterInitialize event (#782)
   - Phalcon\Dispatcher optimizations (#782)
   - Added getPreviousControllerName(), getPreviousActionName() (#1462)
 - Phalcon\Element:
   - Phalcon\Element::addFilter() incorrectly prepends NULL as the first element (#1019)
 - Phalcon\Escaper:
   - Fixed bugs in Phalcon\Escaper (#917)
   - Phalcon\Escaper optimizations (#1015)
 - Phalcon\Events:
   - Added support for weak references (#663)
   - Bug fix in Phalcon\Events\manager::attach() (#1331, #1337)
 - Phalcon\Forms:
   - Phalcon\Forms\Element\* classes now implement Phalcon\Form\ElementInterface
   - Added support for HTML attributes to Phalcon\Forms\Form::label() (#1029)
   - Phalcon\Forms\Form::getMessages() does not generate a fatal error if the form is valid (#1349)
   - Improvements to Phalcon\Forms\Form::add() (#1386)
 - Phalcon\Http:
   - Phalcon\Http\Cookie can be used without sessions (#875)
   - Phalcon\Http\Cookie does not ignore expire time (#897)
   - Phalcon\Http\Request fully supports file arrays (#884, #888)
   - Phalcon\Http\Request optimizations (#889)
   - Added getKey(), getError(), isUploadedFile() methods to Phalcon\Http\Request\File (#878, #888)
   - Fixed regression in \Phalcon\Http\Request::getRawBody() (#1091)
   - Bug fix in Phalcon\Http\Request::getQuery() (#1226)
   - Fixed broken Phalcon\Http\Response::setFileToSend() method (#831, #832)
   - Redirects use status descriptions from RFC 2616 (#1175)
   - Phalcon\Http\Response::setFileToSend() can now show the file in the browser instead of offering to download it (#853)
   - Added Phalcon\Http\Response\Headers::toArray() (#1008)
   - getJsonRawBody() may return an associative array (#1241)
   - Added getURI(), getBasicAuth(), getDigestAuth() methods to Phalcon\Http\Request (#1250)
   - Added getPut()/hasPut() methods to Phalcon\Http\Request (#680, #1403)
   - Implemented Phalcon\Http\Request\File::getRealType (#1442, #1444)
 - Phalcon\Image:
   - Added Phalcon\Image\Adapter, Phalcon\Image\Adapter\Gd, Phalcon\Image\Adapter\Imagick (#902, #1025, #1030, #1041, #1050, #1063, #1076, #1081, #1114, #1120, #1158, #1195, #1206, #1214, #1370)
 - Phalcon\Logger:
   - Added FirePHP Log Adapter and Formatter (#845, #1333)
   - Implemented Phalcon\Logger\Adapter::isTransaction() (#1238)
   - Fixed a bug preventing the EMERGENCY log type from being displayed correctly (#1498)
   - Added Phalcon\Logger\Adapter\File::getPath() (#1495, #1508)
 - Phalcon\Mvc:
   - Phalcon\Mvc\Application::handle() now checks whether the class exists before include()'ing its file (#812, #818)
   - Phalcon\Mvc\Model\Criteria::fromInput() now sets _modelName (#866, #873)
   - Phalcon\Mvc\Model\Query\Builder may now use both integer and string placeholders (#701)
   - Mvc\Model\getMessages() is filterable now (#885)
   - Fixed hasManyToMany relation implementation (#938)
   - Fixed regular expression in \Phalcon\Mvc\Model\Validator\Email (#1243)
   - Phalcon\Mvc\Model::hasOne/hasMany/belongsTo/hasManyToMany/addBehavior() are now public methods (#1166)
   - Added Phalcon\Mvc\Model\Row::toArray() method (#1506)
   - Phalcon\Mvc\Model\Validator::getOption() returns NULL if the option does not exist (#1530)
   - Bug with a custom Events Manager in Phalcon\Mvc\Models (#1314)
   - Phalcon\Mvc\Model\Query\Builder::__construct() does not ignore joins anymore (#1327)
   - Fixed HAVING handling in Phalcon\Mvc\Model\Query\Builder (#1396)
   - Micro Collections return Phalcon\Mvc\Micro\CollectionInterface (#1130)
   - Phalcon\Mvc\Url::get() can append query params (#723, #877)
   - Regular Expression Optimization for Phalcon\Mvc\Router (#977)
   - PHQL: added placeholders support to LIMIT (#1023)
   - Added Phalcon\Mvc\Router::getDefautXXX() methods (#1087)
   - Allow HAVING without GROUP BY in query builder (#1115)
   - mvc/model/query.c optimizations (#1129, #1132)
   - Added support for array(limit, offset) as a 'limit' constructor key in Query Builder (#1208)
   - Added support for 'conditions' in Phalcon\Mvc\Model\Query\Builder::__construct() (#1236)
   - Added Phalcon\Mvc\View::isDisabled(), Phalcon\Mvc\View::getRenderLevel(), Phalcon\Mvc\View::getDisabledLevels() (#907, #1320)
   - Added Phalcon\Mvc\View::getCurrentRenderLevel() (#907, #1326)
   - Bug fix in Phalcon\Mvc\Model\Resultset\Simple::toArray() (#1377)
   - Bug fixes in Volt compiler (#1387)
   - Phalcon\Mvc\Model\Query\Builder optimizations (#1414)
   - Allow to set dirs without trailing slashes in Phalcon\Mvc\View (#406, #1440)
   - Phalcon\Mvc\Model\Validator::getOption() returns null if option does not exists (#1531)
   - Added Phalcon\Mvc\Model::selectWriteConnection() (#1519)
   - Added Phalcon\Mvc\Router\Group::convert()/getConverters() (#1555, #1572)
   - Faster Phalcon\Mvc\Model\Row (#1606)
 - Phalcon\Flash:
   - Phalcon\Flash\Session::getMessage('key') returns now an empty array if the key is not found (#908, #920)
   - Phalcon\Flash\Session::getMessages() incorrectly removed all messages (#1575)
   - Implemented Phalcon\Flash\Session::isset() (#1342)
 - Phalcon\Paginator:
   - Phalcon\Paginator\Adapter\Model returns correct results even when page number is incorrect (#1654)
   - Optimized Phalcon\Paginator\Adapter\QueryBuilder (#1632)
   - setCurrentPage() returns $this for all adapters (#1633)
   - Optimized Phalcon\Paginator\Adapter\NativeArray (#1653)
 - Phalcon\Queue:
   - Fixed bug in Phalcon\Queue\Beanstalk::read() (#1348, #1612)
   - Bug fixes in beanstalkd protocol implementation
   - Optimizations (#1621)
 - Phalcon\Security:
   - Phalcon\Security\Exception inherits from Phalcon\Exception, not from \Phalcon\DI\Exception
   - Added Phalcon\Security::computeHmac() (#1347)
   - Bug fixes (#1347)
 - Phalcon\Session:
   - Fix Phalcon\Session\Bag::remove() (#1637)
   - Phalcon\Session\Adapter::get() may optionally remove the data from session (#1358)
 - Phalcon\Tag:
   - Fixed bugs (#903)
   - Fixed radio button generation (#947)
   - Fixed inconsistent behavior of setAutoescape() (#1263)
   - Added missing HTML5 input types (#824, #1323)
   - Added Phalcon\Tag::setTitleSeparator() (#1365)
   - Added support for  (#1422)
   - Fixed inconsistency in Tag::stylesheetLink/javascriptInclude w.r.t. local URLs (#1486)
 - Phalcon\Validation:
   - Added support for error codes (#1171)
   - Bug fixes (#1399)
   - Optimized Phalcon\Validation\Message\Group by using native iterators (#1657)
 - Unit tests:
   - Travis CI imporvements (#819, #846, #949)
   - Use markTestSkipped() instead of echo (#862)
   - Do not run APC tests under CLI when apc.enable_cli is 0 (#1449)
   - Added new tests (#865, #1256, #1260, #1339, #1560, #1563)
   - Skip database tests when the DBMS is not available (#970)
   - Support for optional RVO (#1147)
   - Added support for test coverage visualization (#1307, #1361)
   - Bug fixes in tests (#1313, #1334, #1335, #1449, #1467)
 - Documentation bug fixes (#1069, #1070, #1072, #1145, #1146, #1205, #1372, #1397, #1521, #1523, #1586, lots of them)
 - Refactored, improved and optimized build script (#1218)
 - Other bug fixes (#1051, #1131, #1040, #1275, #1392, #1396, #1399, #1425, #1426...)

Help with Testing

This version can be installed from the 1.3.0 branch:

git clone http://github.com/phalcon/cphalcon
cd build
git checkout 1.3.0
sudo ./install

We welcome your comments regarding this new release. If you discover any bugs, please (if possible) create a failing test and submit a pull request, alongside with an issue on Github.

Thanks!