2.1.4 - 2014-05-24


2.1.3 - 2014-05-12

    Strings::fixEncoding() uses iconv in PHP 5.3, because htmlspecialchars can be very slow
    added option to disable autoloading of annotation classes via AnnotationsParser::$useAnnotationClasses
    Reverted SendmailMailer use CRLF in subject, see comment
    fixed detection of primary keys in SQlite
    Forms: SelectBox works with NULL items and no items


2.1.3 RC - 2014-05-05


2.1.2 - 2014-03-17

    Image: added support for image resource cloning #1329
    Forms: added Form::DATA_KEYS for preserving keys in getHttpData() #1433
    Forms & netteForms.js: fixed bug in negative toggling via toggle(..., FALSE)
    PhpGenerator: Added support for variadics (PHP 5.6 feature) #1414
    Mail: SendmailMailer use CRLF in subject. #1437
    Random: mcrypt_create_iv() crashes with „Fatal error: mcrypt_create_iv(): Could not gather sufficient random data“ in PHP 5.3.3 on Windows
    Latte Macros: n:ifcontent checks for whitespaces (closes #1387)
    Latte: improved HTML comments escaping
    Debugger: fixed HTTPS detection on nginx
    Debugger: error.phtml erases HTML output
    Strings::fixEncoding() removed dependency on mbstring for UTF-8 encoding


2.1.1 - 2014-02-10

    disables safeUrl when |dataStream, {link} or {plink} are used
    adds ability to render checkboxes via n:name without using colon in name
    enables coexistence of annotation @method with extension methods #1344
    fixes SelectBox::setItems without keys
    and doubled DB query after toArray #1332
    multiple service inheritance
    snippetArea with included template
    HTML5 validation of required CheckboxList
    TextInput: min/max input attributes for multiple range rules
    fixes combination of n:name with other n:attributes

Adds:

    CSRF token is protected against BREACH attack
    Application::$onPresenter event
    helper escapeUrl as alias for url
    Strings::random uses openssl_random_pseudo_bytes or mcrypt_create_iv
    supports short <select n:name=... />


2.1.1-RC2 - 2014-02-08


2.1.1-RC1 - 2014-02-03


2.1.0 - 2013-12-30

Application & Presenter

    PresenterFactory: configurable mapping Presenter name -> Class name
    Route: new pseudo-variables %basePath%, %tld% and %domain%
    Presenter: new method sendJson()

Caching

    added SQLite storage (Nette/Caching/Storages/SQLiteStorage)

Database (NDB)

    complete refactoring, a ton of bug fixes
    lazy connection
    much better (dibi-like) SQL preprocessor
    Selection, ActiveRow: insert() & update() methods return row instances with refetched data
    Selection: added placeholder support select(), group(), having(), order() methods
    SqlLiteral: added placeholder support
    Selection: added WHERE conditions consider NOT for IN operator
    new driver for Sqlsrv
    Sqlite supports multi-inserts

Debugger

    Bar: you can see bar after redirect
    Dumper: colored and clickable dumps in HTML or terminal
    Debugger: full stack trace on fatal errors (requires Xdebug)

Dependency Injection (DI)

    auto-generated factories and accessors via interface
    adding compiler extensions via config file
    configurable presenters via config file
    annotation @inject
    bullet syntax for anonymous services

Forms

    setOmitted: excludes value from $form->getValues() result
    implemented full validation scopes
    Form::getOwnErrors() returns only errors attached to form
    Radiolist::getLabel(..., $key) returns label for single item
    added ChoiceControl, MultiChoiceControl and CheckboxList
    SelectBox and CheckboxList: allowes to disable single items
    UploadControl allowes multiple files upload
    validators Form::INTEGER, NUMERIC and FLOAT converts values to integer or float
    validator Form::URL prepends http:// to value
    Form::getHttpData($htmlName) returns data for single field
    supports Twitter Bootstrap 2 & 3 (see examples)
    removed dependency on Environment
    improved toggles
    data-nette-rules attribute is JSON

Latte

    supports <tag attr=$val> without quotes
    new macro n:name for <form> <input> <select> <textarea>
    partially rendered radiolists using {input name:$key} and {label name:$key}
    new modifier |safeurl which allowes only http(s), ftp and mailto protocols
    safeurl is automatically used for href, src, action and formaction attributes (can be bypassed by |nosafeurl modifier)
    new modifier |noescape which is preferred over exclamation mark
    {foreach ...|nointerator} bypasses creating variable $iterator
    new macro n:ifcontent
    {include block} can be written without hash

Http

    added new SessionPanel
    RequestFactory: new method setProxy()

Utils

    new utility class FileSystem
    new utility class Callback
    Arrays: new method isList()
    Arrays: method flatten() supports key preserving
    Strings: new methods findPrefix() and normalizeNewLines()
    Json: supports pretty output
    Validators: new method isType()

Mailing

    SmtpMailer: persistent connection

Others

    minified version is PHAR file
    ObjectMixin: magic methods setProperty(), getProperty(), isProperty() and addProperty() by @method
    SafeStream: supports ftruncate (requires PHP 5.4+)


2.0.14 - 2014-01-01


2.1.0-RC4 - 2013-12-18


2.1.0-RC1 - 2013-11-27 


2.0.13 - 2013-11-05

It fixes security bug in Latte and introduces new form validators NOT_EQUAL & BLANK.


2.0.12 - 2013-08-07

Nette Framework 2.0.12 has just been released and is now available for download. Feel free to update!

It fixes few bugs in Nette\Database discovered in 2.0.11 (#1156, #1175, #1198), in netteForms.js, sanitizes server name in Nette\Mail, adds support for IPv6 in Nette\Http\RequestFactory and has better performance with APC.


2.0.11 - 2013-07-11

    Nette\Database is much faster
    fixed are quotes in sent emails #634
    added new modifier |noescape and n:name in Latte and improved escaping in HTML comments
    new Adminer with better skin & autocomplete plugin in Sandbox, now accessible only from localhost
    and much more (#700, #1026, #900, #1057, …)


2.0.10 - 2013-03-08

It contains a lot of improvements and fixes mostly in FileJournal and Database, contributed by 13 authors.

For the details about the changes you can have a look at the Github diff.

(Support for constants in config file introduced in 2.0.9 was removed due to BC break.)


2.0.9 - 2013-03-05


2.0.8 - 2013-01-01

Fixes and improvements:

    Database: a lot of fixes, see changelog
    security: String::random() uses even more entropy and now it's great
    Neon: fixed error "Backtrack limit was exhausted" and it removes BOM
    Debugger: "caused by" exception in better visible & some fixes
    Cache: fixed problem with nested {cache} macros
    Forms: added support for #hash part of URL


2.0.7 - 2012-11-28

Fixes and improvements:

    Database: implemented multi primary key support and a lot of fixes (in type detection, …)
    Config: added support for anonymous services defined via bullets
    Latte: added support for {input $control}, {label $control} and n:input=$control, where $control is object IFormControl
    UI\Presenter: invalid URL parameters are ignored and do not throw 404 HTTP error
    MicroPresenter: returns 404 HTTP error when parameter callback is missing
    Session: session ID is not regenerated after 30 minutes
    Mail: fixed sending BCC header via SMTP protocol
    PresenterComponent: to override constructor and not to call its ancestor will not cause error
    Debugger: sends error-code after every errors
    Tests: test are updated to last version of Nette\Tester


2.0.6 - 2012-10-01

Fixes and improvements:

    Database: really a lot of fixes and improvements, added PostgreSQL tests
    Tests: we are moved to Nette\Tester and using Travis CI
    added FTP deployment tool
    RobotLoader: smarter detection of changed files
    Finder: added workaround for PHP bug in AppendIterator
    added some workarounds for PHP 5.4.x and 5.3.16 bugs


2.0.5 - 2012-08-30

Fixes and improvements:

    Database: really a lot of fixes and improvements
    Presenters: dependencies can be passed via inject*() methods
    Latte: fixed {define} and dynamic blocks
    FileResponse: fixed range processing
    Validators: improved URL and email validator (client side & server side)
    Debugger: dumps additional info for resources
    Sandbox contains Adminer 3.5.1 with Nette skin (looks like API doc)


2.0.4 - 2012-07-30

Improvements:

    Database: added support for foreign keys in PostgreSQL driver
    Added support for getting public methods as Closure in PHP >= 5.3. $this->formSubmitted
    Route: slash is not converted to %2F
    Presenter: directory 'templates' may be located inside presenter's directory
    Nette sandbox becomes a Composer package.

Changes:

    Presenter: fixed array-to-string conversion errors in PHP 5.4
    Fixes and improvements in Neon and Latte syntax.
    Improved error messages in Presenter, Latte, DI Container.
    Contains Adminer 3.4.0 with new Nette skin (looks like API doc)


2.0.3 - 2012-04-03

Improvements:

    Added $_SESSION to Debugger bluescreen.
    Added syntax highlighted dump() in Linux.
    Tests runs in parallel (reduce time from 2 minutes to 10 seconds).
    Nette becomes a Composer package.

Changes:

    Default value of header X-Frame-Options is now sameorigin
    Default value of session autoStart changed to smart.
    Introduces method Nette\Config\Configurator::setDebugMode() used to replace setProductionMode().


2.0.2 - 2012-03-30


2.0.1 - 2012-02-24


2.0.0 - 2012-02-01

Nette Framework 2.0 has many innovations, some of them are unique in the PHP world:

    full Dependency Injection support, extensively used in whole framework
    new database layer with integrated awesome library NotORM
    completely rewritten Latte, very handy templating language
    customizable Debugger, developer's little helper with a lot of predefined panels
    new markup language NEON
    new ways to configure framework and applications
    Nette stays to be one of the most secured framework in the world

…and a lot lot lot of enhancements in every part of framework.

Nette Framework also comes with new and great documentation. How to get started? Try Quick Start tutorial.

Nette Framework 2 is released. It's time to celebrate!


0.9.7 - 2012-01-19


0.9.6 - 2010-09-18

Řada 0.9 se uzavírá a souhrn všech bugfixů za poslední 2,5 měsíce najdete ve verzi 0.9.6. Update je doporučený a žádné nekompatibility by se objevit neměly.

Pár dní ještě 0.9.6 považujme za release candidate, kdyby se náhodou objevila nějaká chyba, promptně ji opravím.

Nette 0.9 RIP!


0.9.5 - 2010-06-29

Venku je verze 0.9.5. Ta především opravuje řadu chybiček, jejichž kompletní výčet najdete v changelogu. Velkou interní změnou je, že repozitář byl převeden do PHP 5.3 a teprve z něj se generují distribuce frameworku určené pro PHP 5.2. Což vyřešilo nedostatky v generování prefixované verze. Druhou interní změnou je úprava adresářové struktury frameworku. Přičemž obě interní změny by neměly mít vliv na funkčnost.

Ze všech úprav bych zdůraznil jen několik:

    Nette\Mail by měl mít fixnuté všechny známé nedostatky v kompatibilitě s emailovými klienty
    metody Nette\Mail dále striktně kontrolují, zda jsou všechny parametry kódovány v UTF-8
    SmartCachingIterator (tj. makro {foreach}) nyní umí iterovat i nad SimpleXMLElement
    používejte login(), logout() a isLoggedIn(), volání starších metod vyvolá varování
    nové konstanty NETTE, NETTE_VERSION_ID, NETTE_PACKAGE a také PHP_VERSION_ID pod PHP < 5.2.7


0.9.4 - 2010-04-13

Světlo světa spatřila nová stabilní verze 0.9.4. Ta především opravuje řadu chybiček, jejichž kompletní výčet najdete v changelogu. Zároveň také přináší několik vylepšení:

    podpora vícevláknového kešování pomocí callbacků a dramatické zrychlení RobotLoaderu
    aliasy login(), logout() a isLoggedIn()
    odstraněn Session::$verificationKeyGenerator
    při spuštení Nette\Application se automaticky nastartuje session, je-li přítomno session-ID
    přidáno Identity::__isset()

Formuláře:

    lze používat placeholdery %label, %name a %value ve výchozích chybových zprávách
    vypnutí překladače na určitém prvku nevypne překládání chybových zpráv
    zaměněno <form name="..."> za <form id="...">

Šablony

    v modifikátorech lze používat mezery (např. {$var |truncate : 30}) a klíčová slova true, false, null
    přidáno makro {var ...} jako alias pro {assign ...}
    je podporován zápis {var item => value} i {var $item => value}


0.9.3 - 2010-01-27

Po dvou měsících je tu verze 0.9.3. Přináší poměrně dost novinek a opravuje chybičky.

    vylepšení jazyka o globální funkci callback() a Nette\Callback pro čitelnější zápis a volání callbacků
    zásadního zrychlení dosáhla třída RobotLoader
    opraven bug přehazující pořadí parametrů v URI
    vylepšený RoutingDebugger zobrazuje více informací
    přidána třída DateTime53 opravující zmršený DateTime v PHP 5.2 (podpora serializace & unix timestamp)
    metoda createComponent() může vracet instanci
    sjednoceno chování všech funkcí ve frameworku, kterým se jako parameter předává čas. Ten může být zadán buď jako objekt DateTime, řetězec ve formátu '+ 14 days', jako relativní počet sekund nebo jako UNIX timestamp.
    přidána třída Nette\Web\HttpContext
    přidány funkce String::padLeft() a String::padRight() (obdoba str_pad pro UTF-8)
    deprecated: Uri::setPass() a getPass() nahrazuje Uri::setPassword() and getPassword()
    deprecated: HttpResponse::expire() nahrazuje HttpResponse::setExpiration()
    deprecated: Nette\Object::getClass() (důvodem je příliš obecný název, lze nahradit za $obj->reflection->name)
    odstraněny třídy Nette\Loaders\SimpleLoader, Nette\Config\ConfigAdapterXml, Nette\Forms\RepeaterControl

Formuláře

    InstantClientScript: formuláře generují zgruntu nový validační JavaScriptový kód. Ten by měl být lépe přizpůsobitelný (např. pro live validation) a je nezávislý na HTML ID. V této oblasti bude vývoj pokračovat, nicméně nové chování by mělo být stabilní.
    HttpUploadedFile: příkaz move() řeší problematiku přístupových práv, umí vytvořit adresář a lze jej použít i pro více přesunů.
    Html: vylepšeno chování metod getHtml() a getText(), takže objekty Html lze bez problémů používat v labelech apod.
    deprecated: Form::processHttpRequest() bylo přejmenováno na Form::fireEvents()

Debug

    globální funkce dump() jako ("nejen .(lze dumpovat víc proměnných)") zkratka pro Nette\Debug::dump()
    Debug::enable() lze předat výčet IP adres
    kvůli šetření místem nyní Debug nevytváří HTML logy pro opakující se chyby (zvažuju ukládat soubory komprimované)
    opraveny nedostatky logování chyb na některých hostinzích

Šablony

    isFirst() a isLast() podporuje renderování mřížek
    v šablonách lze psát <?xml ... ?> bez kliček kvůli PHP parseru
    Makro {debugbreak} podporuje XDebug
    deprecated: LatteFilter::invoke potažmo CurlyBracketsFilter::invoke (zpravidla by mělo stačit inicializaci filtru odstranit)

Image

    metoda resize() se zápornými argumenty zrcadlí obrázek (Image i ImageMagick)
    metoda calculateSize() je nyní statická (BC break!)

Nette\Reflection

Asi nejvýraznější novinkou je nový soubor tříd Nette\Reflection, které sjednocují a rozšiřují možnosti meta-programování. Sem byla přesunuta podpora anotací a zpracování extension method. Řekl bych, že tohle bude příští velká věc, nicméně tuto oblast čeká ještě velký vývoj.

    anotace fungují všude, eAccelerator není překážkou
    syntaxe anotací byla rozšířena
    deprecated: Nette\Annotations - podpora se přesunula do tříd Nette\Reflection

Cache a session

    objekty ukládané do session nebo cache lze nyní verzovat pomocí anotace @serializationVersion
    FileStorage pro ukládání tagů a priority používá SQLite databázi

Co ve verzi 0.9.3 není?

Ve verzi 0.9.3 nejsou vývojové záležitosti jako tzv. nové snippety, nezměnila se třída Identity a Presenter používá starou adresářovou strukturu a má stále aktivní přepínače $oldLayoutMode a $oldModuleMode. Zmíněné novinky najdete až ve vývojové větvi 1.0-dev.


0.9.2 - 2009-11-10

Po dvou měsících je tu další setinková stabilní verze. Ta především opravuje řadu odhalených chybiček, ale také nabízí několik nových vlastností:

    Route: volitelné sekvence via [...] (POZOR: místo původních složených závorek jsou ve finální verzi hranaté)
    nový testovací framework pro self-testing Nette
    metoda setDefaultValue() na prvcích formuláře
    nová adresářová struktura pro moduly (aktivuje se přes $oldModuleMode) a s tím související BC break - odstranění proměnných prostředí %templatesDir%, %presentersDir%, %componentsDir%, %modelsDir%
    vylepšení Image::crop() a resize() (thanx to kravčo)
    v presenterech lze k singletonům User a Session / SessionNamespace přistupovat přes metody getUser() a getSession().

Šablony:

    předregistrované helpery: length, substr, number, replace, replaceRE, repeat, implode
    proměnná $basePath nahrazující $baseUri (liší se v absenci pravostranného lomítka)
    makro {status ...} pro odeslání HTTP kódu a {layout ...} jako alias pro {extends ...}
    u definic bloků je nepovinný znak #

Kromě zmíněného BC breaku s proměnnými prostředí by se žádná nekompatibilní změna objevit neměla, takže upgrade na 0.9.2 je doporučený.

Poznámka pro uživatele development verze: OldPresenter a snippety s dvojtečkou jsou součástí jen vývojové verze (tj. 0.9.3-dev) a ve verzi 0.9.2 je nenajdete.


0.9.1 - 2009-09-18

Pouhý měsíc po vydání 0.9.0 je tu další setinková stabilní verze. Co nabízí nového?

    CurlyBrackets se přejmenoval na LatteFilter a byla finalizována podpora n:attributů a dopřána možnost měnit syntax maker via {syntax ...}
    výrazně byl vylepšen životní cyklus formulářů
    úpravy API doznal ServiceLocator a rozšířily se tak možnosti konfigurace přes config.ini
    framework má nyní vlastní testovací framework (code coverage se blíží 80 %)
    funkce presenterů byla formalizována a fungují jako konvertor z PresenterRequest -> IPresenterResponse
    nové podoby se dočkal Requirements Checker
    manipulace s obrázky zachovává poloprůhlednost
    vylepšeno chování cache úložiště FileStorage v prostředí Windows
    opravena řada bugů

Součástí distribuce je i nová verze dibi 1.2, jejíž hlavní novinkou je práce s datem prostřednictvím třídy DateTime, takže netrpí limitem pro UNIX timestamp.

Ačkoliv změn je poměrně dost, v jejich souvislosti jsem nezaznamenal žádné problémy, tudíž je možné je v této podobě považovat za stabilní a pustit se do dalšího vývoje. Ten se bude týkat především podpory AJAXu - ve formulářích, presenterech a šablonách.


0.9.0 - 2009-08-16

Můžete dát sbohem verzi 0.8, má svého stabilního nástupce.

Co přináší verze 0.9.0 nového? Vylepšení je poměrně dost, jaké jsou ty nejdůležitější:

    nová knihovna Nette\Mail pro odesílání emailů
    CurlyBracketsFilter (nyní LatteFilter) prošel velkým vývojem a nově nabízí:
        nová makra {isset ...}...{/if}, {assign ...}, {default ...} a {control ...}
        dynamická dědičnost šablon (zatím experimentální feature)
        v případě chyby zobrazuje číslo řádku v šabloně
    koncept chytrých továrniček pro komponenty nahrazující zapovězené metody prepare
    přímočařejší předávání AJAXových dat přes $presenter->payload
    nová verze Routing Debuggeru, zobrazující se jako widget na stránce
    nový pomocník programátora Nette Debug Console a další ladící novinky
    povinné volání metody startup() v Presenteru zabraňující možným chybám
    cache nabízí uživatelské validátory (via Cache::CALLBACKS)
    cache úložiště FileStorage rozděluje soubory do složek
    přešli jsme na Git

Verze by měla být plně zpětně kompatibilní s v0.8 s výjimkou změn uvedených v tomto fóru (a ty jako vždy hlásí upozornění).


0.8 - 2009-05-04


0.7 - 2006-01-23

Released in 2008 as open source after 4 years of development.
