<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>Blog Entries - ZF Blog</title>
    <description>Blog Entries - ZF Blog</description>
    <pubDate>Wed, 15 May 2013 15:00:00 +0000</pubDate>
    <generator>Zend_Feed_Writer 2 (http://framework.zend.com)</generator>
    <link>http://framework.zend.com/blog.html</link>
    <atom:link rel="self" type="application/rss+xml" href="http://framework.zend.com/blog-rss.xml"/>
    <item>
      <title>Zend Framework 2.2.0 Stable Released!</title>
      <pubDate>Wed, 15 May 2013 15:00:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-2-2-0-stable-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-2-2-0-stable-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 2.2.0! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
            <a href="/downloads/latest">http://framework.zend.com/downloads/latest</a>
    </li>
</ul>

<p>
    This is the first <em>stable</em> release in the 2.2 series.
</p><h2>Usability and Consistency</h2>

<p>
    The primary focus of the 2.2 release has been usability and consistency, 
    primarily with regard to creation and configuration of services such as 
    hydrators, input filters, logs, DB connections, cache objects, translators, 
    and forms.
</p>

<p>
    Most of these services now have what are known as "Abstract Factories" that
    are either registered by default, or can be added quickly to your 
    application configuration. Abstract factories are used by the service
    manager when you have multiple services that follow the same instantiation
    pattern, but which have different names. The typical pattern the new 
    abstract factories follow is to use key/configuration pairs under a common
    top-level configuration key to describe the instances desired:
</p>

<pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #DD0000">'log'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'Application\Log'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'writers'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'name'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'stream'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'priority'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">1000</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'options'&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'stream'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'data/logs/app.log'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />&nbsp;&nbsp;&nbsp;&nbsp;),<br />),<br /></span>
</span>
</code></pre>

<p>
    The above creates a logger named "Application\Log" which you can retrieve 
    directly from the service manager. If you wanted to have additional loggers,
    you could do so by adding additional entries under the "log" heading, each
    named, and each providing configuration for a logger.
</p>

<p>
    Besides the logger abstract factory illustrated above, the following 
    components each have abstract factories now, too, using the configuration 
    keys noted:
</p>

<ul>
    <li><code>Zend\Cache</code>: "caches" configuration section, allowing multiple
        named cache storage objects.
    </li>

    <li><code>Zend\Db</code>: "adapters" subkey of the "db" configuration section;
        this abstract factory allows you to finally have multiple named DB adapter
        instances, effectively allowing for read-only and write-only connections.
    </li>

    <li><code>Zend\Form</code>: "forms" configuration section (which makes use 
        of several old and new plugin managers, as noted below).</li>
</ul>

<p>
    A number of new plugin managers were also added. Plugin managers are 
    specialized service manager instances used by objects that will be consuming
    many different related object instances, often based on runtime conditions.
    As examples, view helpers and controller plugins are mediated by plugin
    managers.
</p>

<p>
    The new plugin manager instances include:
</p>

<ul>
    <li><code>Zend\Stdlib\Hydrator\HydratorPluginManager</code>, for retrieving hydrator
        instances. This allows re-use of individual hydrators, and coupled with the 
        forms abstract factory, allows usage of custom hydrators across your form 
        instances.
    </li>

    <li><code>Zend\InputFilter\InputFilterPluginManager</code>, for retrieving
        (configurable) input filter instances. This allows re-use of input filters, as
        well as ensures that all input instances are provided with custom validators
        and/or filters (from the existing validator and filter plugin managers). The
        forms abstract factory makes use of this, which allows us to finally tie 
        together the various plugin managers to create fully configurable and custom
        forms.
    </li>
</ul>

<p>
    Finally, a couple new service factories were created. Service factories 
    usually have a 1:1 relationship between the named service and the instance
    provided, and are ideal for situations where you only need one instance of
    a given service type. In the case of the new factories for 2.2, these include
    <em>translators</em> and <em>sessions</em>.
</p>

<h2>Data Definition Language Abstraction</h2>

<p>
    Zend Framework 2.2 also offers initial support in <code>Zend\Db</code> 
    for dynamic DDL queries.  DDL, for Data Definition Language, is a subset of 
    SQL that comprises different commands for building RDBMS data 
    structures like tables, columns, constraints, indexes, views, triggers 
    and the like.
</p>

<p>
    Initial support is limited to creating tables with SQL92 data-types, and 
    some specialization for MySQL support.  Here is an example of <code>CREATE 
    TABLE</code> statement:
</p>

<pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">use&nbsp;</span><span style="color: #0000BB">Zend</span><span style="color: #007700">\</span><span style="color: #0000BB">Db</span><span style="color: #007700">\</span><span style="color: #0000BB">Sql</span><span style="color: #007700">\</span><span style="color: #0000BB">Sql</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;use&nbsp;</span><span style="color: #0000BB">Zend</span><span style="color: #007700">\</span><span style="color: #0000BB">Db</span><span style="color: #007700">\</span><span style="color: #0000BB">Sql</span><span style="color: #007700">\</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">CreateTable</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setTable</span><span style="color: #007700">(</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addColumn</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Column</span><span style="color: #007700">\</span><span style="color: #0000BB">Integer</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'id'</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">12</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</span><span style="color: #DD0000">'auto_increment'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'comment'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Some&nbsp;comment'</span><span style="color: #007700">]<br />&nbsp;&nbsp;&nbsp;&nbsp;));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addColumn</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Column</span><span style="color: #007700">\</span><span style="color: #0000BB">Varchar</span><span style="color: #007700">(</span><span style="color: #DD0000">'name'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addColumn</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Column</span><span style="color: #007700">\</span><span style="color: #0000BB">Char</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">20</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addConstraint</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Constraint</span><span style="color: #007700">\</span><span style="color: #0000BB">PrimaryKey</span><span style="color: #007700">(</span><span style="color: #DD0000">'id'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addConstraint</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Constraint</span><span style="color: #007700">\</span><span style="color: #0000BB">UniqueKey</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'my_unique_key'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$sql&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Sql</span><span style="color: #007700">(</span><span style="color: #0000BB">$adapter</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #0000BB">$sql</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getSqlStringForSqlObject</span><span style="color: #007700">(</span><span style="color: #0000BB">$t</span><span style="color: #007700">);<br /></span>
</span>
</code></pre>

<p>Once this table is created, it can then be altered:</p>

<pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">AlterTable</span><span style="color: #007700">(</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">changeColumn</span><span style="color: #007700">(</span><span style="color: #DD0000">'name'</span><span style="color: #007700">,&nbsp;new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Column</span><span style="color: #007700">\</span><span style="color: #0000BB">Varchar</span><span style="color: #007700">(</span><span style="color: #DD0000">'new_name'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addColumn</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Column</span><span style="color: #007700">\</span><span style="color: #0000BB">Varchar</span><span style="color: #007700">(</span><span style="color: #DD0000">'another'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addColumn</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Column</span><span style="color: #007700">\</span><span style="color: #0000BB">Varchar</span><span style="color: #007700">(</span><span style="color: #DD0000">'other_id'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dropColumn</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addConstraint</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">Constraint</span><span style="color: #007700">\</span><span style="color: #0000BB">ForeignKey</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'my_fk'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'other_id'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'other_table'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'id'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'CASCADE'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'CASCADE'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$t</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dropConstraint</span><span style="color: #007700">(</span><span style="color: #DD0000">'my_index'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #0000BB">$sql</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getSqlStringForSqlObject</span><span style="color: #007700">(</span><span style="color: #0000BB">$t</span><span style="color: #007700">);<br /></span>
</span>
</code></pre>

<p>Or even dropped:</p>

<pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;&nbsp;&nbsp;$dt&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Ddl</span><span style="color: #007700">\</span><span style="color: #0000BB">DropTable</span><span style="color: #007700">(</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #0000BB">$sql</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getSqlStringForSqlObject</span><span style="color: #007700">(</span><span style="color: #0000BB">$dt</span><span style="color: #007700">);<br /></span>
</span>
</code></pre>

<p>
    What can this be used for?
</p>

<p>
    That is where you come in.  This particular feature was asked for numerous 
    times during ZF1 development.  We'd like to see what kind of ZF2 modules 
    can be created with this base infrastructure.  Migration assistant?  ORM 
    database creation tool?  Advanced CMS?  Let us know; we'll be adding more 
    vendor specific support over the 2.2 to 2.3 timeline.
</p>

<h2>New Service Wrappers</h2>

<p>
    Zend Framework has a long history of providing API wrappers; in fact, they
    were a prominent part of the initial pre-release! The tradition continues
    in ZF2, though each API wrapper now has its own repository.
</p>

<p>
    Alongside the 2.2.0 release, we're also providing initial beta releases of
    two new service components: <code>ZendService_Api</code> and 
    <code>ZendService_OpenStack</code>.
</p>

<h3>ZendService_Api</h3>

<p>
    This is an HTTP microframework for consuming generic API calls in PHP. This 
    framework can be used to create PHP libraries that consume specific HTTP APIs 
    using either a simple configuration array or files. This project uses the 
    <code>Zend\Http\Client</code> component of Zend Framework 2.
    <a href="http://www.zimuel.it/en/zendservice-api-micro-http-framework/">Enrico has 
blogged about the component previously.</a>
</p>

<h3>ZendService_OpenStack</h3>

<p>
    We began the development of a new library to support the last API version of <a 
    href="http://www.openstack.org">OpenStack</a>.
    The goal of this component is to simplify the usage of OpenStack in PHP, 
    providing a simple object oriented interface to its API services.
    This component is based on <code>ZendService_Api</code>, giving us a flexible 
    way to update the HTTP specification with the future API versions.
</p>

<h2>ZFTool Diagnostic Features</h2>

<p>
    Artur Bodera (aka Thinkscape) provided a new diagnostics feature for ZFTool. 
    Using this feature, we can allow the execution of customized diagnostics tests 
    in ZF2 projects, including testing for the required PHP version, testing for 
    specific PHP extensions, testing for specific ZF2 modules, testing for specific 
    PHP INI settings, and more; <a 
    href="https://github.com/zendframework/ZFTool/blob/master/docs/DIAGNOSTICS.md">read 
    the documentation to get an idea of the variety of tests available.</a>
</p>

<p>
    Moreover, with the collaboration of the <a 
    href="https://github.com/liip/LiipMonitor">LiipMonitor project</a>, we decided 
    to create common interfaces for performing diagnostic tests in PHP 
    applications.  An initial draft is available in the <a 
    href="https://github.com/zendframework/ZendDiagnostics">ZendDiagnostic 
    repository</a>.
</p>

<p>
    The diagnostics feature is available in the <a href="https://packages.zendframework.com/zftool.phar">
    latest version of ZFTool</a>.
</p>

<h2>Hydrator Improvements</h2>

<p>
    As noted earlier, <code>Zend\Stdlib\Hydrator</code> now has a plugin manager
    you can compose into your objects for managing hydrator instances. However,
    beyond that, we also now have an "Aggregate Hydrator", which allows you to
    provide specialized mapping of your object types to hydrators via an event-based
    system.
</p>

<p>
    Why is this exciting? Many of our users utilize <a href="http://doctrine-project.org">Doctrine</a>
    as an Object Relational Mapping (ORM) system. Oftentimes, the entities that you
    work with will also form a hierarchical structure. The Aggregate Hydrator allows
    allows you to attach a single hydrator to the parent object, and ensure that all
    child and descendant objects are either hydrated or extracted according to their
    type.
</p>

<h2>Reducing Dependencies</h2>

<p>
    We have started work on a new story for the framework: reducing dependencies
    for individual components. We have received feedback from a number of 
    developers and organizations indicating that even though each component
    can be installed individually, the number of dependencies most components
    mark as required leads to a situation where they feel they must choose
    whether or not they adopt the framework, versus adopting just the component.
    While of course we'd like them to adopt the framework, we'd rather they
    get a taste for it, if you will.
</p>

<p>
    While this story is primarily slated for 2.3, we have made our first steps
    in 2.2, with the <code>Zend\Feed</code> and <code>Zend\Validator</code>
    components. 
</p>

<p>
    <code>Zend\Validator</code> removed its dependency on the i18n component.
    We achieved this by creating <a href="http://martinfowler.com/eaaCatalog/separatedInterface.html" target="_blank">Separated 
    Interfaces</a> for the translator. Considering translation was only enabled
    if you explicitly injected a translator, this was a natural course of action.
    (It also introduced a minor backwards compatibility break; see below for more
    information.)
</p>

<p>
    For <code>Zend\Feed</code>, many "required" dependencies were actually
    optional already, and we could mark them as such. There were two that were
    not, however, and which required similar treatment as <code>Zend\Validator</code>
    in creating separated interfaces: the service manager (used for extension
    management) and HTTP (for fetching remote feeds with the reader). Interfaces
    were developed for each of these, and <code>Zend\Feed</code> now has only
    two required dependencies. A nice side benefit is that you can now use
    third-party HTTP clients with <code>Zend\Feed\Reader</code>!
</p>

<h2>Migration Notes</h2>

<p>
    While we have worked hard to keep code backwards compatible (BC), there are a few
    noteworth changes that <em>may</em> affect your code.
</p>

<ul>
    <li><code>Zend\Validator</code> no longer directly consumes a <code>Zend\I18n\Translator\Translator</code> 
        instance; instead, you must either implement <code>Zend\Validator\Translator\TranslatorInterface</code>
        or use <code>Zend\Mvc\I18n\Translator</code>. In most cases, this change
        should be transparent, as validator instances managed by the 
        ValidatorPluginManager will already be using the correct instance.
    </li>

    <li>In 2.1.5, a BC break was accidently introduced into <code>Zend\Navigation</code> in
        order to enable a feature: MVC pages were altered to always use route match values when
        available when generating URIs. 2.2.0 was modified to add a flag to enable this
        behavior on demand, but defaults to the original behavior, which does not
        pass the route match values to the pages. If you relied on this behavior
        in 2.1.5, add the following option to your individual MVC page definitions:

        <pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #DD0000">'use_route_match'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,<br /></span>
</span>
</code>        </pre>
    </li>
</ul>

<h2>Other Notable Improvements</h2>

<ul>
    <li>
        <strong>Authentication:</strong> The DB adapter now supports non-RDBMS credential validation.
    </li>

    <li>
        <strong>Cache:</strong> New storage backend: Redis.
    </li>

    <li>
        <strong>Code:</strong> The ClassGenerator now has a removeMethod() method.
    </li>

    <li>
        <strong>Console:</strong> Incremental improvements to layout and colorization of banners
        and usage messages; fixes for how literal and non-literal matches are returned.
    </li>

    <li>
        <strong>Filter:</strong> New DateTimeFormatter filter.
    </li>

    <li>
        <strong>Form:</strong> Many incremental improvements to selected 
        elements; new FormAbstractServiceFactory for defining form services; minor improvements
        to make the form component work with the DI service factory.
    </li>

    <li>
        <strong>InputFilter</strong>: new CollectionInputFilter for working 
        with form Collections; new InputFilterPluginManager providing 
        integration and services for the ServiceManager.
    </li>

    <li>
        <strong>I18n:</strong> We removed ext/intl as a hard requirement, and made it only a
        suggested requirement; the Translator has an optional dependency on the EventManager,
        providing the ability to tie into "missing message" and "missing translations" events;
        new country-specific PhoneNumber validator.
    </li>

    <li>
        <strong>ModuleManager:</strong> Now allows passing actual Module instances (not just names).
    </li>

    <li>
        <strong>Navigation:</strong> Incremental improvements, particularly to URL generation.
    </li>

    <li>
        <strong>MVC:</strong> You can now configure the initial set of MVC 
        event listeners in the configuration file; the MVC stack now detects generic HTTP responses
        when detecting event short circuiting; the default ExceptionStrategy 
        now allows returning JSON; opt-in translatable segment routing; many incremental
        improvements to the AbstractRestfulController to make it more configurable and
        extensible; the Forward plugin was refactored to no longer require a 
        ServiceLocatorAware controller, and instead receive the ControllerManager via its
        factory.
    </li>

    <li>
        <strong>Paginator:</strong> Support for TableGateway objects.
    </li>

    <li>
        <strong>ServiceManager:</strong> Incremental improvements; performance optimizations;
        delegate factories, which provide a way to write factories for objects that replace
        a service with a decorator; "lazy" factories, allowing the ability to 
        delay factory creation invocation until the moment of first use.
    </li>

    <li>
        <strong>Stdlib:</strong> Addition of a HydratorAwareInterface; creation 
        of a HydratorPluginManager.
    </li>

    <li>
        <strong>SOAP:</strong> Major refactor of WSDL generation to make it more maintainable.
    </li>

    <li>
        <strong>Validator:</strong> New Brazilian IBAN format for IBAN validator; validators 
        now only return unique error messages; improved Maestro detection in 
        CreditCard validator.
    </li>

    <li>
        <strong>Version:</strong> use the ZF website API for finding the latest version,
        instead of GitHub.
    </li>

    <li>
        <strong>View:</strong> Many incremental improvements, primarily to 
        helpers; deprecation of the Placeholder Registry and removal of it from 
        the implemented placeholder system; new explicit factory classes for helpers
        that have collaborators (making them easier to override/replace).
    </li>
</ul>

<h2>Changelog</h2>

<p>
    Greater than 150 patches were applied for 2.2.0. 
</p>

<ul>
    <li><a href="/changelog/2.2.0">http://framework.zend.com/changelog/2.2.0</a></li>
</ul>

<h2>Other Announcements</h2>

<p>
    Over a month ago, we migrated <a href="https://github.com/zendframework/zf1">Zend 
    Framework 1 to GitHub</a>. At that time, we also migrated active issues created since
    1.12.0 to the <a href="https://github.com/zendframework/zf1/issues">GitHub issue tracker</a>,
    and marked our self-hosted issue tracker read-only. We have decided to turn off that issue
    tracker, but still retain the original issues at their original locations for purposes
    of history and transparency. You can find information on the change on our <a href="/issues">
    issues landing page</a>.
</p>

<h2>Thank You!</h2>

<p>
    Please join me in thanking everyone who provided new features and code 
    improvements for the 2.2.0 release! We had a huge leap forward in usability
    of many components, and a number of key new features that make developing
    applications simpler. We'll be continuing on these themes for the next
    release as well.
</p>

<h2>Roadmap</h2>

<p>
    Maintenance releases are scheduled for the third Wednesday of each month;
    expect 2.2.1 on 19 June 2013. Minor releases are scheduled roughly every 
    quarter; look for 2.3 sometime around mid-August or early September. 
    Proposals and ideas for stories will be presented on the zf-contributors
    mailing list; subscribe by sending an email to 
    zf-contributors-subscribe [at] lists.zend.com if you are interested in
    assisting with its development.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 2.2.0rc3 Released!</title>
      <pubDate>Fri, 10 May 2013 13:30:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-2-2-0rc3-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-2-2-0rc3-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 2.2.0rc3! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
        <a href="https://packages.zendframework.com/">http://packages.zendframework.com/</a>
    </li>
</ul>

<p>
    This is a <em>release candidate</em>. It is not the final release, and 
    while stability is generally considered good, there may still be issues
    to resolve between now and the stable release. Use in production with 
    caution.
</p>

<p>
    <strong>DO</strong> please test your applications on this RC, as we would 
    like to ensure that it remains backwards compatible, and that the migration
    path is smooth.
</p><h2>Changes in this version</h2>

<p>
    Please see our <a href="/blog/zend-framework-2-2-0rc1-released.html">post for 2.2.0rc1</a>
    and our <a href="/blog/zend-framework-2-2-0rc1-released.html">post for 2.2.0rc2</a>
    for a list of changes. In addition to those changes, the following have been
    made:
</p>

<ul>
    <li>
    <p>
        A late addition of <code>Zend\Stdlib\Hydrator\Aggregate</code> was made. This
        functionality allows the ability to map hydrators to objects via events, and
        generally streamlines the process of having a single hydrator for a hierarchy
        of objects. Read more in the <a href="http://zf2.readthedocs.org/en/latest/modules/zend.stdlib.hydrator.aggregate.html">AggregateHydrator documentation</a>.
    </p>
    </li>

    <li>
    <p>
        Improvements were made to <code>Zend\Di</code> to make it work better with the
        various "Aware" interfaces that have proliferated throughout the framework,
        eliminating issues where the component would attempt to instantiate an interface.
    </p>
    </li>
</ul>

<h2>Changelog</h2>

<p>
    Almost 200 patches were applied for 2.2.0. We will not release a full
    changelog until we create the stable release. In the meantime, you can
    view a full set of patches applied for 2.2.0 in the 2.2.0 milestone on
    GitHub:
</p>

<ul>
    <li><a href="https://github.com/zendframework/zf2/issues?milestone=14&state=closed">Zend Framework 2.2.0 milestone</a></li>
</ul>

<h2>Thank You!</h2>

<p>
    Please join me in thanking everyone who provided new features and code 
    improvements for this upcoming 2.2.0 release!
</p>

<h2>Roadmap</h2>

<p>
    This is the third release candidate. At this time, we anticipate a stable 
    release sometime mid-week next week.
</p>

<p>
    Over the next few days, we will be expanding on documentation, and fixing 
    any critical issues brought to our attention; we do not anticipate many,
    if any, critical issues at this time, however.
</p>

<p>
    Again, <strong>DO</strong> please test your applications on this RC, as we 
    would like to ensure that it remains backwards compatible, and that the 
    migration path is smooth.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 2.2.0rc2 Released!</title>
      <pubDate>Mon, 06 May 2013 22:00:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-2-2-0rc2-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-2-2-0rc2-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 2.2.0rc2! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
        <a href="https://packages.zendframework.com/">http://packages.zendframework.com/</a>
    </li>
</ul>

<p>
    This is a <em>release candidate</em>. It is not the final release, and 
    while stability is generally considered good, there may still be issues
    to resolve between now and the stable release. Use in production with 
    caution.
</p>

<p>
    <strong>DO</strong> please test your applications on this RC, as we would 
    like to ensure that it remains backwards compatible, and that the migration
    path is smooth.
</p><h2>Changes in this version</h2>

<p>
    Please see our <a href="/blog/zend-framework-2-2-0rc1-released.html">post for 2.2.0rc1</a>
    for a list of changes. In addition to those changes, the following have been
    made:
</p>

<ul>
    <li>
    <p>
        A late change was made to eliminate and/or make optional several dependencies in
        <code>Zend\Feed</code> and <code>Zend\Validator</code>. While these are generally
        backwards compatible, we need to note that you can no longer directly use
        <code>Zend\I18n\Translator\Translator</code> with validators; instead, you must
        use <code>Zend\Mvc\I18n\Translator</code>. In most cases, this will not present
        an issue, as the translator object is generally injected via the 
        <code>ValidatorPluginManager</code>, which has already been updated to inject
        the correct translator object. 
    </p>

    <p>
        <strong><em>If you were manually injecting your validators with a 
        translator object, please note that you must now use 
        <code>Zend\Mvc\I18n\Translator</code>.</em></strong>
    </p>

    <p>
        The changes have some immediate benefits: you can now use <code>Zend\Feed</code>
        with third-party HTTP clients!
    </p>
</ul>

<h2>Changelog</h2>

<p>
    Almost 200 patches were applied for 2.2.0. We will not release a full
    changelog until we create the stable release. In the meantime, you can
    view a full set of patches applied for 2.2.0 in the 2.2.0 milestone on
    GitHub:
</p>

<ul>
    <li><a href="https://github.com/zendframework/zf2/issues?milestone=14&state=closed">Zend Framework 2.2.0 milestone</a></li>
</ul>

<h2>Thank You!</h2>

<p>
    Please join me in thanking everyone who provided new features and code 
    improvements for this upcoming 2.2.0 release!
</p>

<h2>Roadmap</h2>

<p>
    We plan to release additional RCs every 3-5 days until we feel the 2.2.0
    release is generally stable; we anticipate a stable release sometime next week.
</p>

<p>
    During the RC period, we will be expanding on documentation, and fixing any
    critical issues brought to our attention.
</p>

<p>
    Again, <strong>DO</strong> please test your applications on this RC, as we 
    would like to ensure that it remains backwards compatible, and that the 
    migration path is smooth.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 2.2.0rc1 Released!</title>
      <pubDate>Wed, 01 May 2013 22:50:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-2-2-0rc1-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-2-2-0rc1-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 2.2.0rc1! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
        <a href="https://packages.zendframework.com/">http://packages.zendframework.com/</a>
    </li>
</ul>

<p>
    This is a <em>release candidate</em>. It is not the final release, and 
    while stability is generally considered good, there may still be issues
    to resolve between now and the stable release. Use in production with 
    caution.
</p>

<p>
    <strong>DO</strong> please test your applications on this RC, as we would 
    like to ensure that it remains backwards compatible, and that the migration
    path is smooth.
</p><h2>Changes in this version</h2>

<ul>
    <li>
    <p>
        <strong>Addition of many more plugin managers and abstract service factories.</strong>
        In order to simplify usage of the <code>ServiceManager</code> as an <a href="http://en.wikipedia.org/wiki/Inversion_of_Control">Inversion of Control</a> 
        container, as well as to provide more flexibility in and consistency in how various
        framework components are consumed, a number of plugin managers and service factories
        were created and enabled. 
    </p>

    <p>
        Among the various plugin managers created are Translator loader manager, a Hydrator
        plugin manager (allowing named hydrator instances), and an InputFilter manager.
    </p>

    <p>
        New factories include a Translator service factory, and factories for 
        both the Session configuration and SessionManager.
    </p>
        
    <p>
        New abstract factories include one for the DB component (allowing you to manage
        multiple named adapters), Loggers (for having multiple Logger instances),
        Cache storage (for managing multiple cache backends), and Forms (which makes use
        of the existing FormElementsPluginManager, as well as the new Hydrator and InputFilter
        plugin managers).
    </p>
    </li>

    <li>
    <p>
        <strong>Data Definition Language (DDL) support in Zend\Db.</strong> DDL 
        provides the ability to create, alter, and drop tables in a relational 
        database system. Zend\Db now offers abstraction around DDL, and 
        specifically MySQL and ANSI SQL-92; we will gradually add this 
        capability for the other database vendors we support.
    </p>
    </li>

    <li>
        <strong>Authentication:</strong> The DB adapter now supports non-RDBMS credential validation.
    </li>

    <li>
        <strong>Cache:</strong> New storage backend: Redis.
    </li>

    <li>
        <strong>Code:</strong> The ClassGenerator now has a removeMethod() method.
    </li>

    <li>
        <strong>Console:</strong> Incremental improvements to layout and colorization of banners
        and usage messages; fixes for how literal and non-literal matches are returned.
    </li>

    <li>
        <strong>DB:</strong> New DDL support (noted earlier); many incremental improvements.
    </li>

    <li>
        <strong>Filter:</strong> New DateTimeFormatter filter.
    </li>

    <li>
        <strong>Form:</strong> Many incremental improvements to selected 
        elements; new FormAbstractServiceFactory for defining form services; minor improvements
        to make the form component work with the DI service factory.
    </li>

    <li>
        <strong>InputFilter</strong>: new CollectionInputFilter for working 
        with form Collections; new InputFilterPluginManager providing 
        integration and services for the ServiceManager.
    </li>

    <li>
        <strong>I18n:</strong> We removed ext/intl as a hard requirement, and made it only a
        suggested requirement; the Translator has an optional dependency on the EventManager,
        providing the ability to tie into "missing message" and "missing translations" events;
        new country-specific PhoneNumber validator.
    </li>

    <li>
        <strong>ModuleManager:</strong> Now allows passing actual Module instances (not just names).
    </li>

    <li>
        <strong>Navigation:</strong> Incremental improvements, particularly to URL generation.
    </li>

    <li>
        <strong>MVC:</strong> You can now configure the initial set of MVC 
        event listeners in the configuration file; the MVC stack now detects generic HTTP responses
        when detecting event short circuiting; the default ExceptionStrategy 
        now allows returning JSON; opt-in translatable segment routing; many incremental
        improvements to the AbstractRestfulController to make it more configurable and
        extensible; the Forward plugin was refactored to no longer require a 
        ServiceLocatorAware controller, and instead receive the ControllerManager via its
        factory.
    </li>

    <li>
        <strong>Paginator:</strong> Support for TableGateway objects.
    </li>

    <li>
        <strong>ServiceManager:</strong> Incremental improvements; performance optimizations;
        delegate factories, which provide a way to write factories for objects that replace
        a service with a decorator; "lazy" factories, allowing the ability to 
        delay factory creation invocation until the moment of first use.
    </li>

    <li>
        <strong>Stdlib:</strong> Addition of a HydratorAwareInterface; creation 
        of a HydratorPluginManager.
    </li>

    <li>
        <strong>SOAP:</strong> Major refactor of WSDL generation to make it more maintainable.
    </li>

    <li>
        <strong>Validator:</strong> New Brazilian IBAN format for IBAN validator; validators 
        now only return unique error messages; improved Maestro detection in 
        CreditCard validator.
    </li>

    <li>
        <strong>Version:</strong> use the ZF website API for finding the latest version,
        instead of GitHub.
    </li>

    <li>
        <strong>View:</strong> Many incremental improvements, primarily to 
        helpers; deprecation of the Placeholder Registry and removal of it from 
        the implemented placeholder system; new explicit factory classes for helpers
        that have collaborators (making them easier to override/replace).
    </li>
</ul>

<h2>Changelog</h2>

<p>
    Almost 200 patches were applied for 2.2.0. We will not release a full
    changelog until we create the stable release. In the meantime, you can
    view a full set of patches applied for 2.2.0 in the 2.2.0 milestone on
    GitHub:
</p>

<ul>
    <li><a href="https://github.com/zendframework/zf2/issues?milestone=14&state=closed">Zend Framework 2.2.0 milestone</a></li>
</ul>

<h2>Other Announcements</h2>

<p>
    Around a month ago, we migrated <a href="https://github.com/zendframework/zf1">Zend 
    Framework 1 to GitHub</a>. At that time, we also migrated active issues created since
    1.12.0 to the <a href="https://github.com/zendframework/zf1/issues">GitHub issue tracker</a>,
    and marked our self-hosted issue tracker read-only. We have decided to turn off that issue
    tracker, but still retain the original issues at their original locations for purposes
    of history and transparency. You can find information on the change on our <a href="/issues">
    issues landing page</a>.
</p>

<h2>Thank You!</h2>

<p>
    Please join me in thanking everyone who provided new features and code 
    improvements for this upcoming 2.2.0 release!
</p>

<h2>Roadmap</h2>

<p>
    We plan to release additional RCs every 3-5 days until we feel the 2.2.0
    release is generally stable; we anticipate a stable release in the next
    2-3 weeks.
</p>

<p>
    During the RC period, we will be expanding on documentation, and fixing any
    critical issues brought to our attention.
</p>

<p>
    Again, <strong>DO</strong> please test your applications on this RC, as we 
    would like to ensure that it remains backwards compatible, and that the 
    migration path is smooth.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 2.1.5 Released!</title>
      <pubDate>Wed, 17 Apr 2013 18:00:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-2-1-5-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-2-1-5-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 2.1.5! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
        <a href="/downloads/latest">http://framework.zend.com/downloads/latest</a>
    </li>
</ul>

<p>
    This is a monthly maintenance release.
</p><h2>Notable changes</h2>

<p>
    2.1.5 is a monthly maintenance release, and the bulk of issues resolved
    were primarily centered around code maintainability - docblocks typos were
    corrected, internal variables renamed more semantically, etc. However, a
    few changes are notable:
</p>

<ul>
    <li>A long-standing issue <a href="https://github.com/zendframework/zf2/pull/4226">regarding 
        setting global permissions in <code>Zend\Permissions\Acl</code></a> was resolved.
    </li>

    <li><a href="https://github.com/zendframework/zf2/pull/4241"><code>Zend\Db\Metadata</code> 
        was updated to no longer use the untrusted <code>quoteValue()</code> 
        API</a>; this means it will no longer create notices!
    </li>

    <li><a href="https://github.com/zendframework/zf2/pull/4148">Filter 
        priority settings are no longer lost when merging filter chains.</a>
    </li>

    <li><a href="https://github.com/zendframework/zf2/pull/4147">The stop-propagation flag is
        now reset when triggering an event.</a> This solves a problem that occurred in the MVC
        when triggering multiple different events in succession.
    </li>

    <li>A fix was applied to prevent <a href="https://github.com/zendframework/zf2/pull/4168"><code>Zend\Console</code>
        from bleeding color to the next line</a>.
    </li>

    <li><code>Zend\Navigation</code> now <a href="https://github.com/zendframework/zf2/pull/4084">supports 
        query parameters properly</a>.
    </li>

    <li><a href="https://github.com/zendframework/zf2/issues/3373">Forms now allow empty
        collections</a></li>

    <li><a href="https://github.com/zendframework/zf2/issues/2898"><code>Zend\Navigation</code>
        now properly injects pages with dependencies</a>.
    </li>
</ul>

<h2>Manual improvements</h2>

<p>
    Last month, we held our first <a href="http://framework.zend.com/blog//2013-03-28-help-us-improve-the-documentation.html">documentation hunt</a>, 
    resulting in a lot of documentation improvements.
</p>

<p>
    Additionally, we began an effort to provide Zend Framework 1 -&gt; Zend 
    Framework 2 migration information. <a href="http://zf2.readthedocs.org/en/latest/migration/overview.html">A 
    preview is available on readthedocs.org</a>.
</p>

<h2>Changelog</h2>

<p>
    Almost 100 patches were applied to the ZF2 codebase, and dozens to the documentation.
    The full changelog for 2.1.5 is available:
</p>

<ul>
    <li><a href="/changelog/2.1.5">http://framework.zend.com/changelog/2.1.5</a></li>
</ul>

<h2>Thank You!</h2>

<p>
    I'd like to thank everyone who provided issue reports, typo fixes, maintenance
    improvements, bugfixes, and documentation improvements; your efforts make the
    framework increasingly better!
</p>

<h2>Roadmap</h2>

<p>
    Maintenance releases happen monthly on the third Wednesday. Version 2.2.0 
    will release in the first half of May, with the first release candidate dropping
    during the week of 29 April - 3 May 2013.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Help us improve the documentation!</title>
      <pubDate>Thu, 28 Mar 2013 09:15:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/2013-03-28-help-us-improve-the-documentation.html</link>
      <guid>http://framework.zend.com/blog/2013-03-28-help-us-improve-the-documentation.html</guid>
      <author>robertbasic.com@gmail.com (Robert Basic)</author>
      <dc:creator>Robert Basic</dc:creator>
      <content:encoded><![CDATA[<p>
    A piece of software is only as good as its documentation. The Zend 
    Framework team and a dozen or so contributors are working hard to 
    improve the Zend Framework 2 documentation, but we still want <em>you</em> 
    to help us improve it even more. Any kind of help is welcome and greatly 
    appreciated.
</p>

<p>
    First of all, you don't have to have a major in English literature to help 
    us with the documentation. We, the contributors, come from all over the 
    world and many of us use English as a second &mdash; or even third! &mdash; 
    language, but that does not stop us from trying to improve the docs. Neither 
    should it stop you.
</p>

<p>
    We are not asking for much. Read a chapter or two, or 
    even just a paragraph. Point us to parts of the documentation that are 
    confusing, unclear, or not explained well enough. Would it be easier for you 
    to understand a section if we would add a picture or two? <em>Tell us.</em> Do you 
    want to see more code examples? <em>Let us know.</em> Pick a component that you use 
    most often and work with the contributors to have the documentation for 
    that component as clear as possible. Have something to add? <em>Send a pull 
    request.</em>
</p>

<p>
    We all learn in different ways, and while some documentation might be good for one 
    developer, it might be confusing for another. That's why we are striving to 
    have several different ways of presenting the material: reference manual, 
    tutorials, user guides, API docs. Let us know what works best for you and 
    we will do our best to make it happen.
</p>

<p>
    We would like to ask you one thing, though. Any and all problems, requests, 
    ideas you have that can help us improve the documentation, please report 
    them on <a href="https://github.com/zendframework/zf2-documentation/issues">the documentation issue 
    tracker on Github</a>. Thanks!
</p><p>
    If you'd like to start contributing to the documentation by submitting 
    patches and improvements, the best place to start is to read the <a 
    href="https://github.com/zendframework/zf2-documentation/blob/master/CONTRIBUTING.md">contributing 
    guide</a>.
</p>

<p>
    Just so you know that we do really work on improving the documentation, a 
    week or so ago we held our first dochunt. It was a weekend dedicated to 
    improving the documentation and <a href="https://gist.github.com/Bittarman/27575710b347bdb73631">as you can 
    see from the results</a> quite a few fixes and improvements were made,
    thanks to those who participated. In the coming weeks, we will hold the next 
    dochunt. This time we will try to strictly focus on writing new tutorial and 
    improving existing ones, but any and all contributions are welcomed.
</p>

<p>
    We don't know yet when the second dochunt will be held, but we will let you 
    know. Until then, <a href="http://framework.zend.com/manual/2.1/en/index.html">start reading 
    through the manual</a>, look for things to improve, keep a list of what's missing, and 
    <a href="https://github.com/zendframework/zf2-documentation/issues">give us 
    feedback</a>!
</p>

<p>
    The contributors and the Zend Framework team thank you!
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 1 is Migrating to Git!</title>
      <pubDate>Wed, 27 Mar 2013 16:45:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/2013-03-27-zf1-git-migration.html</link>
      <guid>http://framework.zend.com/blog/2013-03-27-zf1-git-migration.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    Since its inception, Zend Framework 1 has used <a 
    href="http://subversion.apache.org/">Subversion</a>
    for versioning. However, as we approach its end-of-life (which will occur 
    12-18 months from the time this post is written), and as our experience
    with ZF2 processes becomes more familiar, we -- the Zend team and the Community
    Review team -- feel that we can better support ZF1 via <a href="http://github.com">GitHub</a>.
</p>

<p>
    As such, we will be migrating the ZF1 Subversion repository to GitHub this 
    week. Please read on for details!
</p><h2>What will happen</h2>

<h3>Subversion Access</h3>

<p>
    <strong>First: you will still have access to Subversion!</strong> 
</p>

<p>
    For versions prior to 1.12, we will continue hosting our current Subversion 
    repository, and if you are using <code>svn:externals</code> with a tag or
    branch on that repository, that will continue to work. However, the
    repository will be read-only going forward.
</p>

<p>
    The release-1.12 branch, however, will become the "master" branch on the GitHub
    repository. All future updates, including security fixes, will be made to this
    branch and this branch only; future tags will be made against GitHub. 
    However, for those of you using Subversion, all is not lost: 
    Github <a href="https://github.com/blog/966-improved-subversion-client-support">supports</a> 
    <a href="https://github.com/blog/626-announcing-svn-support">Subversion</a>!
    (That's <em>2</em> separate links!)
</p>

<p>
    If you are pointing your <code>svn:externals</code> at either trunk or the 
    release-1.12 branch, you will need to update your <code>svn:externals</code>
    to point at the new repository location. To do this, you will execute the 
    following:
</p>

<pre class="highlight">
[user@server]$ svn propedit svn:externals path/in/working-dir/to/zf1
</pre>

<p>
    This will spawn an editor. In that editor, change the URL for ZF1:
</p>

<ul>
    <li>
        "http://framework.zend.com/svn/framework/standard/trunk" becomes 
        <strong>"https://github.com/zendframework/zf1/trunk"</strong>
    </li>

    <li>
        "http://framework.zend.com/svn/framework/standard/branches/release-1.12" becomes 
        <strong>"https://github.com/zendframework/zf1/trunk"</strong>
    </li>

    <li>
        "http://framework.zend.com/svn/framework/standard/tags/release-1.12<code>.*</code>" become
        <strong>"https://github.com/zendframework/zf1/tags/release-1.12<code>.*</code>"</strong>
    </li>
</ul>

<p>
    Once you have made this change, save and exit. Then run:
</p>

<pre class="highlight">
[user@server]$ svn commit -m "update externals"
</pre>

<h3>svn:externals - Dojo</h3>

<p>
    Currently, the ZF1 repository defines a single <code>svn:externals</code> 
    property, which adds <a href="http://dojotoolkit.org/">Dojo Toolkit</a>.
</p>

<p>
    Currently, this points to version 1.5 of Dojo, as that is the last version 
    with which ZF1 maintained compatibility. We have decided with the move to
    GitHub to remove the <code>svn:externals</code> entry, and <em>not</em> add
    a git submodule; however, we <em>will</em> continue packaging Dojo 1.5 in
    any ZF1 releases.
</p>

<p>
    If you relied on the <code>svn:externals</code> definition in ZF1 in order
    to obtain Dojo, you will need to add it to your repository yourself. If you
    need to do so, point the definition at "http://svn.dojotoolkit.org/src/branches/1.5".
</p>

<h3>"Extras" Repository</h3>

<p>
    The "extras" repository, which contains the jQuery integration, Firebird DB 
    adapter, and console process forking tools, will also be migrated to GitHub,
    following the same pattern as for the ZF1 repo (i.e., release-1.12 branch
    will become the master branch on the GitHub repository, and the old 
    subversion repository will be marked read-only). You will need to update
    any <code>svn:externals</code> definitions just as you would for ZF1, with
    the following mappings:
</p>

<ul>
    <li>
        "http://framework.zend.com/svn/framework/extras/trunk" becomes 
        <strong>"https://github.com/zendframework/zf1-extras/trunk"</strong>
    </li>

    <li>
        "http://framework.zend.com/svn/framework/extras/branches/release-1.12" becomes 
        <strong>"https://github.com/zendframework/zf1-extras/trunk"</strong>
    </li>
</ul>

<h3>Issue Tracker</h3>

<p>
    Since Zend Framework 1 is in maintenance mode at this time, we are only 
    addressing critical or security issues. As such, we have decided to port 
    only open issues created since 1.12.0 was released (at the time of this 
    writing, around 66 issues) to GitHub issues.
</p>

<p>
    The JIRA instance will be marked read-only. We will likely disable it in
    the near future; if we do so, we will likely provide static pages of all
    issues for later reference. <em>(This item is still to be determined.)</em>
</p>

<p>
    Information on the new issue tracker location will be placed on the JIRA
    landing page, with links to each of the ZF1, ZF1 Extras, and ZF2 
    repositories.
</p>

<h3>Collaboration</h3>

<p>
    Once the cutover occurs, only the Zend team and the Community Review team will
    have commit rights on the GitHub repository. This means that patches will need
    to be submitted as <a href="https://help.github.com/articles/creating-a-pull-request">Pull
    Requests</a>. Once submitted, members of these teams, as well as the 
    general community, can comment and provide feedback; once consensus is reached
    that the patch is ready, it will be merged to the repository.
</p>

<p>
    If you are unfamiliar with Git and/or GitHub, we recommend the following resources:
</p>

<ul>
    <li><a href="https://help.github.com/">GitHub help site</a>, which details
    everything from setting up Git to creating and forking repositories, to collaborating.</li>

    <li><a href="http://git-scm.org">git-scm site</a>, which provides a comprehensive,
    online book detailing basics to advanced features of Git.</li>

    <li><a href="https://github.com/zendframework/zf2/blob/master/README-GIT.md">ZF2 Git Guide</a>,
    which details the typical contributor workflow; simply substitute "zf1" for "zf2" in that
    guide. (We will likely add this to ZF1 soon as well.)</li>
</ul>

<p>
    One note: at this point, we will only accept bug and security fixes; new 
    features are not currently in scope for Zend Framework 1.
</p>

<p>
    <strong>Important!</strong> You will still need to have a Contributors License Agreement (CLA)
    on file for us to accept your contributions. For this reason, we recommend setting your
    <code>user.email</code> git configuration setting to the same email used 
    for your CLA; with this information, we can easily look up your CLA status, which will
    expedite our ability to merge your pull requests/patches. To do this, simply execute the
    following from within your ZF1 checkout:
</p>

<pre class="highlight">
[user@server]$ git config user.email "your-email@example.com"
</pre>

<p>
    Do this <em>prior</em> to making any commits, to ensure that the commits in 
    your patch are attributed to that email.
</p>

<h2>Timeline</h2>

<p>
    The plan at this time is to mark the ZF1 subversion repository and issue 
    tracker read-only starting Friday, 5 April 2013.
</p>

<h2>Future</h2>

<p>
    The repository and issues migration is the first step in a series of planned 
    migrations. We also plan to eventually migrate our wiki to GitHub; this will
    allow us to offload functionality from the main ZF website, and also 
    consolidate all development-related functionality (other than the mailing 
    list) in a central location.
</p>

<p>
    If you have any concerns, please feel free to contact <a href="mailto:matthew@zend.com">myself</a>,
    <a href="/contact">my team</a>, or the <a href="mailto:zf-crteam@zend.com">Community Review Team</a>.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 2.1.4, 2.0.8, and 1.12.3 Released!</title>
      <pubDate>Thu, 14 Mar 2013 15:30:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/2013-03-14-zend-framework-3-for-1-release-day.html</link>
      <guid>http://framework.zend.com/blog/2013-03-14-zend-framework-3-for-1-release-day.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of three new releases: 2.1.4, 2.0.8, and 1.12.3!  Packages and installation 
    instructions are available at:
</p>

<ul>
    <li>
        <a href="/downloads/latest">http://framework.zend.com/downloads/latest</a>
    </li>
</ul>

<p>
    The ZF2 releases include three security updates, and all ZF versions also 
    include updates to the Twitter component to follow the Twitter v1.1 API, 
    which is not backwards compatible with previous versions.
</p><h2>Security Fixes</h2>

<p>
    2.1.4 and 2.0.8 contain three security fixes.
</p>

<h3>Query Route</h3>

<p>
    We were alerted to the fact that the Query route could override parameters
    matched in parent routes, effectively bypassing constraints defined. In
    particular, this could result in overriding the controller or action matched
    by a given route.
</p>

<p>
    The query route was deprecated, as a replacement exists within the HTTP router
    itself. You can pass a "query" option to the assemble method containing either
    the query string or an array of key-value pairs:
</p>

<pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$url&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$router</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assemble</span><span style="color: #007700">(array(<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'name'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,<br />),&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'query'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'page'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'sort'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'DESC'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;or:&nbsp;'query'&nbsp;=&gt;&nbsp;'page=3&amp;sort=DESC'<br /></span><span style="color: #007700">));<br /><br /></span><span style="color: #FF8000">//&nbsp;via&nbsp;URL&nbsp;helper/plugin:<br /></span><span style="color: #0000BB">$rendererOrController</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">url</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,&nbsp;array(),&nbsp;array(</span><span style="color: #DD0000">'query'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$request</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getQuery</span><span style="color: #007700">()));<br /></span>
</span>
</code></pre>

<p>
    Additionally, the merging of query parameters into the route match was removed
    entirely. Please use the query container of the request object instead.
</p>

<p>
    For more information on the security vector, please see
    <a href="/security/advisory/ZF2013-01">ZF2013-01</a>.
</p>

<h3>Random Number Generation</h3>

<p>
    The <code>Zend\Math\Rand</code> component generates random bytes using the OpenSSL
    or Mcrypt extensions when available but will otherwise use PHP's
    <code>mt_rand()</code> function as a fallback. All outputs from <code>mt_rand()</code> are
    predictable for the same PHP process if an attacker can brute force
    the seed - which can be done if the attacker has access to a random number
    generated by `mt_rand` or the session ID (if generated without using additional
    entropy). 
</p>

<p>
    Zend Framework have revised the <code>Zend\Math\Rand</code> component to replace the
    current <code>mt_rand()</code> fallback for OpenSSL/Mcrypt with Anthony Ferrara's
    <a href="https://github.com/ircmaxell/RandomLib">RandomLib</a>, incorporating an additional
    entropy source based on <a href="https://github.com/GeorgeArgyros/Secure-random-bytes-in-PHP">source code published by George Argyros</a>. The new
    fallback collects entropy from numerous sources other than PHP's internal seed
    mechanism and extracts random bytes from the resulting mixed entropy pool.
</p>

<p>
    For more information on this security vector, please see
    <a href="/security/advisory/ZF2013-02">ZF2013-02</a>.
</p>

<h3>Database Platform Quoting</h3>

<p>
    Altered <code>Zend\Db</code> to throw notices when insecure usage of the 
    following methods is called: 
</p>

<ul>
    <li><code>Zend\Db\Adapter\Platform\*::quoteValue*()</code></li>
    <li><code>Zend\Db\Sql\*::getSqlString*()</code></li>
</ul>

<p>
    Fixed <code>Zend\Db</code> Platform objects to use driver level quoting when provided, and
    throw <code>E_USER_NOTICE</code> when not provided.  Added <code>quoteTrustedValue()</code> API for
    notice-free value quoting.  Fixed all userland quoting in Platform objects to
    handle a wider array of escapable characters.
</p>

<p>
    For more information on this security vector, please see
    <a href="/security/advisory/ZF2013-03">ZF2013-03</a>.
</p>

<h2>Twitter API Updates</h2>

<p>
    Twitter has begun sunsetting its v1.0 API, and has introduced rolling 
    blackouts in order to prompt developers to move to the v1.1 API. 
    Unfortunately, v1.1 is not backwards compatible with v1.0, so a number
    of backwards-breaking changes need to be made.
</p>

<p>
    Version 2.1.0 of <a href="https://github.com/zendframework/ZendService_Twitter">ZendService_Twitter</a>
    and version 1.12.3 of Zend Framework have been released with support for 
    v1.1 of the Twitter API. A number of service endpoints were removed, and others
    moved to new namespaces. As such, if you use the component, you are urged to upgrade,
    and we encourage you to read the documentation to see what methods are now available,
    and how to use OAuth access tokens with the service.
</p>

<h2>Polyfill Support Fixes</h2>

<p>
    Polyfills (version-specific class replacements) have caused some issues in 
    the 2.1 series for users of <code>Zend\Stdlib</code> and 
    <code>Zend\Session</code>.  In particular, users who were not using Composer 
    were unaware/uncertain about what extra files needed to be included to load 
    polyfills, and those users who were generating classmaps were running into 
    issues since the same class was being generated twice.
</p>

<p>
    New polyfill support was created which does the following:
</p>

<ul>
    <li>New, uniquely named classes were created for each polyfill base.</li>

    <li>A stub class file was created for each class needing polyfill support. 
    A conditional is present in each that uses <code>class_alias</code> to 
    alias the appropriate polyfill base as an import. The stub class then 
    extends the base.</li>

    <li>The <code>compatibility/autoload.php</code> file in each component affected was altered to trigger an <code>E_USER_DEPRECATED</code> error asking the user to remove the require statement for the file.</li>
</ul>

<p>
    The functionality works with both Composer and ZF2's autoloading support, using
    either PSR-0 or classmaps. All typehinting is preserved.
</p>

<h2>Changelog</h2>

<p>
    Below are links to the changelogs for each version.
</p>

<ul>
    <li><a href="/changelog/2.1.4">2.1.4 Changelog</a></li>
    <li><a href="/changelog/2.0.8">2.0.8 Changelog</a></li>
    <li><a href="/changelog/1.12.3">1.12.3 Changelog</a></li>
</ul>

<h2>Thank You!</h2>

<p>
    I'd like to thank our main contributors to this release. In particular, 
    Pádraic Brady and Enrico Zimuel for researching and implementing the Random
    Number Generator vulnerability and fixes; Ben Scholzen for implementing fixes
    for the Query route; Ralph Schindler, for his fixes for the database platform
    quoting vulnerabilities; and Mike Willbanks, for continuing to work on 
    solutions for session storage and timing issues.
</p>

<h2>Roadmap</h2>

<p>
    Maintenance releases happen monthly on the third Wednesday; expect version 2.1.5
    to drop 17 April 2013. We're also gearing up for version 2.2.0, which we are 
    targetting at the end of April 2013/early May.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 1.12.2 Released!</title>
      <pubDate>Mon, 25 Feb 2013 21:12:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-1-12-2-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-1-12-2-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 1.12.2! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
        <a href="/downloads/latest">http://framework.zend.com/downloads/latest</a>
    </li>
</ul><h2>Changelog</h2>

<p>
    This release includes almost 50 bugfixes and stability fixes. In particular,
    a fix was released for <code>Zend_Service_Twitter</code>, ensuring that it
    will continue to work with the Twitter API going forward. <em>If you are using the
    <code>Zend_Service_Twitter</code> component, please upgrade immediately, or
    your code will not work!</em>
</p>

<p>
    To see the complete set of issues resolved for 1.12.2, please visit the changelog:
</p>

<ul>
    <li>
        <a href="/changelog/1.12.2">http://framework.zend.com/changelog/1.12.2</a>
    </li>
</ul>

<h2>Thank You!</h2>

<p>
    Many thanks to all contributors to this release! 
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Zend Framework 2.1.3 Released!</title>
      <pubDate>Thu, 21 Feb 2013 22:00:00 +0000</pubDate>
      <link>http://framework.zend.com/blog/zend-framework-2-1-3-released.html</link>
      <guid>http://framework.zend.com/blog/zend-framework-2-1-3-released.html</guid>
      <author>matthew@zend.com (Matthew Weier O'Phinney)</author>
      <dc:creator>Matthew Weier O'Phinney</dc:creator>
      <content:encoded><![CDATA[<p>
    The Zend Framework community is pleased to announce the immediate availability
    of Zend Framework 2.1.3! Packages and installation instructions are
    available at:
</p>

<ul>
    <li>
        <a href="/downloads/latest">http://framework.zend.com/downloads/latest</a>
    </li>
</ul>

<p>
    This release has been pushed out quickly on the heels of 2.1.2 to fix an
    issue with autoloading PHP version-specific class implementations that was
    affecting PHP 5.3.3 users. Two other potential regressions were also
    addressed.
</p><h2>PHP 5.3.3 Users</h2>

<p>
    This release finally resolves issues with providing PHP version-specific 
    classes, specifically for PHP 5.3.3 users.
</p>

<p>
    If you are using <a href="http://getcomposer.org/">Composer</a> to manager
    your dependencies, a <code>composer.phar update</code> should resolve any
    issues.
</p>

<p>
    If you are not, you have two options.
</p>

<p>
    First, when starting new applications with the <a href="https://github.com/zendframework/ZendSkeletonApplication">ZendSkeletonApplication</a>,
    class substitution will now happen by default.
</p>

<p>
    Otherwise, add the following lines to your <code>init_autoloader.php</code>
    file, as indicated by the comments below:
</p>

<pre class="highlight"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;The&nbsp;following&nbsp;line&nbsp;should&nbsp;be&nbsp;on&nbsp;or&nbsp;around&nbsp;line&nbsp;34:<br /></span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$zf2Path</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isset(</span><span style="color: #0000BB">$loader</span><span style="color: #007700">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$loader</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #DD0000">'Zend'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$zf2Path</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;</span><span style="color: #0000BB">$zf2Path&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'/Zend/Loader/AutoloaderFactory.php'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Zend</span><span style="color: #007700">\</span><span style="color: #0000BB">Loader</span><span style="color: #007700">\</span><span style="color: #0000BB">AutoloaderFactory</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'Zend\Loader\StandardAutoloader'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'autoregister_zf'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Add&nbsp;the&nbsp;following&nbsp;two&nbsp;lines:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">require&nbsp;</span><span style="color: #0000BB">$zf2Path&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'/Zend/Stdlib/compatibility/autoload.php'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require&nbsp;</span><span style="color: #0000BB">$zf2Path&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'/Zend/Session/compatibility/autoload.php'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span>
</span>
</code></pre>

<h2>Routing Fixes</h2>

<p>
    Two fixes to routing were made after discovering potential regressions.
</p>

<p>
    The first was to hostname routing. Changes were introduced in 2.1.2 to make 
    matching optional nested subdomains possible; unfortunately, this broke cases
    where the primary domain was specified. A fix has been included in 2.1.3 that
    fixes the regression (while simultaneously allowing the new behavior).
</p>

<p>
    A bug in console routing was also uncovered; camelCased or MixedCase options
    were allowed in route definitions, but route matching was normalizing options
    to lowercase, causing false negative matches. This was fixed for 2.1.3.
</p>

<h2>Changelog</h2>

<p>
    Below are links to the issues addressed.
</p>

<ul>
    <li><a href="https://github.com/zendframework/zf2/issues/3714">3714: Zend\Stdlib\ArrayObject::offsetExists() returning by reference</a></li>
    <li><a href="https://github.com/zendframework/zf2/issues/3855">3855: Fix #3852</a></li>
    <li><a href="https://github.com/zendframework/zf2/issues/3856">3856: Simple route case insensitive</a></li>
</ul>

<h2>Thank You!</h2>

<p>
    I'd like to thank those that tested the PHP 5.3.3 autoloading fixes, as well
    as Nick Calugar for providing the fix to hostname routing and Michael Gallego
    for the fixes to console routing.
</p>

<h2>Roadmap</h2>

<p>
    Maintenance releases happen monthly on the third Wednesday; expect version 2.1.4
    to drop 20 March 2013. We're also gearing up for version 2.2.0, which we are 
    targetting at the end of April 2013.
</p>]]></content:encoded>
      <slash:comments>0</slash:comments>
    </item>
  </channel>
</rss>
