File: upstream-changelog

package info (click to toggle)
php-nette 2.4-20160731-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 3,208 kB
  • ctags: 7,552
  • sloc: php: 31,410; makefile: 6
file content (1679 lines) | stat: -rw-r--r-- 71,351 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
2.4-20160731

Latte

    CoreMacros: translate macro does not use output buffer when possible nette/latte#124
    Snippets: disable snippet mode when rendering snippets [BC break – interface changed] (nette/latte#127)
    CoreMacros: {spaceless} works the same way as |strip and strips output in chunks
    Revert “deprecated filter |strip”, changed implementation to prevent backtrace limit errors
    BlockMacros: fixed expandTokens in dynamic blocks (nette/latte#125)
    PhpWriter: fixed handling of uppercase class name
    fixed compatibility with PHP 7.1

Application

    SnippetBridge: added setSnippetMode; added snippet test (nette/application#150)
    Presenter: removed static from refUrl variable (nette/application#80)
    Presenter: fixed creating link with required persistent parameters (nette/application#148)
    Presenter: flash key has to be string (fix for “Array to string conversion” notice) (nette/application#147)
    ComponentReflection::parseAnnotations: fixed regexp quoting

Caching

    SQLiteJournal: checking for extension pdo_sqlite is lazy, service cache.journal is created always

Deprecated

All classes and methods trigger deprecation notices.

DI

    PhpReflection::parseAnnotation() regexp fix
    DependencyChecker: prevents fatal error when undefined constant is used as default value of method parameter
    DIExtension: added option ‘parentClass’ nette/bootstrap#52
    ContainerBuilder::resolveImplement: use isDefaultValueAvailable instead of isOptional (nette/di#121)
    ContainerBuilder: improved exception messages
    Config\Loader: removed realpath() to be compatible with FileMock nette/di#120
    ContainerLoader: fixed extra implode() nette/di#119

Forms

    added netteForms.min.js
    netteForms: forms are initialized on DOMContentLoaded instead of onload
    netteForms: fixed compatibility with IE 8
    Container::addInteger() is nullable
    TextInput: Reverts, validators FLOAT doesn't automatically sets type to ‘number’
    TextBase: added setNullable()
    TextBase: emptyValue is removed from value in validate()
    TextBase, TextInput, TextArea: refactoring, rendered value is built in getRenderedValue()
    TextInput: rules are processed in addRule() instead of  getControl() (is consistent with TextBase)

Mail

    SmtpMailer: add support for AUTH PLAIN (nette/mail#31)

Php Generator

    ClassType: added @property $properties (nette/php-generator#23)
    Helpers::dump() native dumping of DateTime & DateTimeImmutable

Tracy

    BlueScreen: catches exceptions while rendering user panels nette/tracy#208
    Dumper: removed dependency on utf8_decode because it is missing in some PHP packages nette/tracy#212
    Bar: assets path dependent on session cookie path (nette/tracy#213)
    bar.js: fix for protocol-less ajax url request (nette/tracy#211)
    bar.js: warning about IE11+ thrown as exception because console may not exist
    Debugger::enable() and dispatch() throws exception when output has been sent
    bar.js: tracks XMLHttpRequest.getResponseHeader method nette/tracy#205
    bar.js: Strip tags from window title when opening in new window (nette/tracy#203)
    Bars: sends CSS with UTF-8 charset (nette/tracy#201)
    TracyExtension: Don't dispatch Debugger in a CLI (nette/tracy#200)
    bar.js: auto hide labels works after ajax


2.4-20160630

Application

    PresenterComponent, Form: added $onAnchor
    Route, SimpleRouter: by default keeps the currently used HTTP/HTTPS protocol (BC break) nette/nette#1196 nette/routing#14
    Route: added support for scheme:// in mask
    Route: add %host% variable
    Route: Added variable for domain second level name (%sld%)
    Route: support for optional [<module>]
    RouteList: added warmupCache()
    PresenterFactory: added possibility to configure mapping via array
    PresenterComponent: added redirectPermanent()
    Presenter: support for direct setting layout file
    Presenter: don't mix GET & POST params in AJAX when form is submitted nette/forms#33 nette/nette#1061
    Snippets: do not render snippets from a template which is included using includeblock macro
    JsonResponse: sends utf-8 charset
    UIMacros: {control} wrap arguments in array only when needed nette/nette#1206

deprecated, changed:

    Presenter: argsToParams() and saveState() now distinguish between NULL and FALSE
    PresenterComponentReflection::convertType() objects can be passed only to parameters without array or scalar type (without array / scalar default value) (BC break)
    Form: uses underscored signal parameter _do only in POST forms
    IRouter::SECURED is deprecated
    Router::$defaultFlags and flag SECURED are deprecated nette/routing#13
    PresenterComponent ⇒ Component
    PresenterComponentReflection ⇒ ComponentReflection
    Control::validateControl() &  invalidateControl(), Presenter::backlink() and Template::registerHelper() trigger E_USER_DEPRECATED
    Presenter: triggers notice when payload is send via terminate()
    UIMacros: uses Latte providers uiControl and uiPresenter instead of $_control and $_presenter
    composer: removed dependency on nette/security

Bootstrap

    Configurator: removed ReflectionExtension
    Configurator: extracted loadContainer() from  createContainer()
    Configurator: warns when deprecated ‘nette’ section is used
    Configurator: removed parameter ‘environment’ (BC break)
    Configurator: removed parameter ‘container’ (BC break)
    Configurator::addConfig() sections are deprecated (BC break)

Caching

    added bulk read support
    removed FileJournal (note that successor SQLiteJournal requires pdo-sqlite extension)
    CacheMacro: compatibility with Latte 2.4, uses Latte provider ‘cacheStorage’ (and ‘cacheStack’)
    CacheMacro: improved dependency on files
    added NewMemcachedStorage using memcached extension

Database

    NDBT: Added alias support
    NDBT: added new method whereOr
    NDBT: Added ability to specify left join conditions
    NDBT: performance, prevents multiple parse of query parts by regexp
    NDBT: queries with limit/offset are automatically ordered by primary key
    NDBT: page() for $page < 1 returns no rows
    drivers: applyLimit throws exception for negative values (BC break)
    Improved checking of unique table name
    Helpers::detectType() uses more strict type patterns
    SqlPreprocessor: detects modes inside SQL string, before ?
    Selection: fixed columns cache in repeated use of same selection
    SqlBuilder: The same conditions with different parameter is not skipped ,
    PgSqlDriver::getTables() returns materialized views
    SqlsrvDriver::formatDateTime(): format datetime by ISO 8601
    Connection: fifth argument is deprecated

Dependency Injection

    implemented Fine Grained Dependencies
    new autowiring approach, option autowired can contain list of classes
    added support for setup syntax $prop = value and '$prop[]' = value
    Compiler: allows to overwrite single arguments
    ContainerLoader::loadFile() invalidates opcache
    ContainerBuilder: split into ContainerBuilder and PhpGenerator
    DIExtension: debugger is enabled by default
    Compiler::parseServices: added @extension syntax for referencing services from a same extension
    Compiler: support for removing services via ‘name: no’

deprecated, changed:

    Compiler: parseServices() and parseService() renamed to loadDefinition() and loadDefinitions()
    di.accessors are deprecated
    ServiceDefinition::setImplementType() and  getImplementType() renamed to setImplementMode() & getImplementMode()
    ContainerLoader::load() swapped arguments (BC break)
    ContainerBuilder: setClassName() &  getClassName() moved to Compiler (BC break)
    Statement::setEntity() is deprecated
    Compiler: option ‘run’ is deprecated, should be used as tag
    Compiler: deprecated section inheritance child < parent (BC break)

Forms

    support for true optional controls via setRequired(FALSE) (BC break)
    checks for missing setRequired(TRUE | FALSE)
    Container: added addEmail() &  addInteger()
    Form: added isMethod(), beforeRender() &  fireRenderEvents() and event $onRender
    negative rules like ~$form::ABCD are deprecated. (Negatives for FILLED & EQUAL are BLANK & NOT_EQUAL)
    controls: getOption(‘type’) for distinguishing between them
    TextInput: validators EMAIL, URL, INTEGER automatically sets type to ‘email’, ‘url’ or ‘number’ (BC break)
    SelectBox, MultiSelectBox: added addOptionAttributes()
    SelectBox: added isOk()
    UploadControl: when file is uploaded with error, automatically shows error and isFilled() returns TRUE (BC break)
    UploadControl: added isOK()
    CheckboxList: added containerPrototype
    DefaultFormRenderer: adds class ‘text’ to input types ‘email’ and ‘number’ (for back compatibility after 72127b1e)
    DefaultFormRenderer: wrapper for hidden fields changed from  <div> to none
    Form::addProtection() is always the first item
    TextBase: added setNullable()
    added BaseControl::enableAutoOptionalMode()

netteForms.js:

    ability to show all error messages at once via Nette.showFormErrors()
    displays all errors at once
    removed support for IE =< 7
    toggle handlers are added on body, uses addEventListener or attachEvent
    forms are initialized on DOMContentLoaded instead of onload

Forms & Latte:

    {label} is AUTO_EMPTY
    <tag n:name> always uses getControlPart() and getLabelPart(), removed method_exists checking (BC break)
    local $_form replaced with global $this->global->formsCurrent so it is not needed to pass $_form to included templates

HTTP

    Implemented RFC 7239 – “Forwarded HTTP Extension”
    Session: fixed error “Session object destruction failed”
    RequestFactory: removes absolute URI from $_SERVER[‘REQUEST_URI’]
    RequestFactory: correctly detects scheme and port if the server is behind a trusted proxy
    IRequest: added OPTIONS and PATCH method constant
    Response: do not send “Possible problem notice in CLI”
    Response::setExpiration() removes header Pragma
    RequestFactory: Fixed possible remoteAddr spoofing
    FileUpload::move() do not suppress system warnings
    HttpExtension, SessionExtension: added parameter $cliMode
    Url: implements JsonSerializable nette/latte#78
    HttpExtension: service http.context is deprecated
    Session: use better detection for started session

Latte

    requires PHP 5.4
    generates pretty PHP code
    implemented content type aware filters (triggers warning when mixing blocks/files in different contexts)
    Implemented inline filters ($var|modifiers)
    added operator in: $entry in [item1, item2]
    {define} accepts parameters
    added macro {import 'file'}
    added macro {spaceless}
    implemented {while} ... {/while $cond}
    extremely fast filters
    added |stripHtml
    added |linebreaks
    added |length for strings, arrays, Countable and Iterator
    {syntax off} can be ended with {/syntax}
    added Engine::addProvider(), runtime dependencies and options for macros
    added SnippetDriver & ISnippetBridge, snippet refactoring
    supports new operators <=> ** ...
    {contentType} do not send header when is rendered to string or included
    {capture} creates Latte\Runtime\Html in HTML content type (BC break)
    new flags IMacro::AUTO_EMPTY and IMacro::AUTO_CLOSE
    StringLoader: accepts array of strings
    added |checkurl & |nocheck as aliases for  |safeurl & |nosafeurl
    added MacroNode::$innerContent nette/nette#1361
    Engine::loadTemplate() invalidates opcode cache
    Parser: exception ‘Template is not valid UTF-8 stream’ provides line number

deprecated, changed:

    inline PHP <? ... ?> is deprecated
    {includeblock} is deprecated
    {? ...} is replaced with {php ...}
    {use} and {status} are deprecated
    |nl2br is deprecated
    BlockMacros: <tag> in {snippet} is deprecated
    {include |escape} and {block |escape} trigger warning about auto-escaping
    {contentType} is allowed only in template header and in <script>
    Latte\Template ⇒ Latte\Runtime\Template
    Engine::getFilters() returns only name of filters
    added ILoader::getUniqueId(), changed interface
    MacroNode, HtmlNode: $isEmpty replaced with $empty
    ILoader::getChildName() ⇒ getReferredName() BC break, changed interface
    uses $global accumulator instead of $_l and $_g
    variable $template is deprecated
    PhpWriter: deprecated support for constant names without underscore
    Parser: removed support for ASP & Python syntax (BC break)

Mail

    Message::setHtmlBody() added new syntax for embedded files [[image.gif]]
    added FallbackMailer
    Message: added addInlinePart()
    SmtpMailer: allow set stream context

Neon

    added support for multilines strings nette/nette#1375
    Decoder: added support for octal 0o777 and binary 0b11001 numbers
    Decoder: generates DateTimeImmutable instead of DateTime (BC break)
    Decoder: refactoring, added some constants

Php Generator

    deprecated addDocument(), setDocuments() and  getDocuments() and replaced with addComment(), setComment() and getComment()

Tracy

    requires PHP 5.4.4 or newer
    Bar & BlueScreen: displays AJAX requests
    saving & restoring of toggles
    Bar: is loaded in separated HTTP requests
    Bar: info bar show HTTP method & response code
    Bar: panel height fits to the viewport
    Bar: automatic labels hiding to conserve space
    Bar: lazy rendering of panels
    BlueScreen: added $maxDepth & $maxLength
    BlueScreen: added panel with last muted error
    BlueScreen: added renderToFile()
    Bluescreen: rel=noopener for target=_blank
    Debugger: added $editorMapping support
    Debugger::$maxLen ⇒ $maxLength
    Debugger::dispatch() starts session if is not started
    Debugger: error exit code changed from 254 to 255 to be the same as native error code
    added function bdump()
    Helpers::getSource: shows PID in CLI logs
    Tracy requires IE11+

Utils

    added trait Nette\SmartObject, it differs from  Nette\Object:
    magic properties without @property annotation are deprecated
    accessing methods as properties is deprecated
    extension methods are deprecated
    magic @methods are deprecated
    getReflection is deprecated
    invoking closure in property is deprecated
    added trait Nette\StaticClass
    Html: renamed add() to addHtml(); added addText()
    Html: deprecated “expanded” attribute data
    Html: added attribute public accessor methods
    Image::place() preserves the alpha channel
    Strings::random() renamed to  Random::generate()
    Random: uses random_bytes() on PHP 7
    FileSystem: added read()
    ArrayList: added prepend()
    Json::encode() uses by default JSON_PRESERVE_ZERO_FRACTION (BC break)
    DateTime: implements JsonSerializable, formats date in ISO 8601 format accepted by JavaScript's Date object (BC break)
    Filter & RecursiveFilter are deprecated


2.3.10 - Apr 13, 2016

    composer.json: relaxed dependencies to ~2.3.x
    Http\RequestFactory: Fixed possible remoteAddr spoofing (issue nette/http#87)
    PresenterFactory: added possibility to configure mapping via array
    Presenter: isLinkCurrent is compatible with PHP 7 typehints
    RouteList: added warmupCache()
    JsonResponse: sends utf-8 charset
    DI\ContainerBuilder: unused parameters check when generating factory
    DI\Compiler: support for removing services via 'name: no'
    Mail\Message: improved regexp for seaching embedded images
    SafeStream: unregister protocols in cleaner way
    Html::__toString() prints better error message
    Latte: exception 'Template is not valid UTF-8 stream' provides line number
    Latte: supports PHP 7 coalesce operator
    Tracy\Bar: added CPU usage to info panel
    TracyExtension: added option 'showBar'


2.3.9 - Feb 22, 2016

Application

    Presenter::argsToParams() computes default values for mandatory parameters with built-in typehint
    Presenter: throws exception when parameter has scalar type hint & no default value and argument is missing
    Route: support for optional [<module>]
    Template: better error message when Translator is not set

Caching

    added NewMemcachedStorage

DI

    DI\Container: added getServiceType()
    DI\Compiler: InjectExtension is moved after extensions added by ExtensionsExtension
    DI\Compiler: calls prepareClassList() after each beforeCompile()
    DI\ContainerBuilder::removeAlias() removes aliases
    DI\Helpers::autowireArguments() better error message for PHP7 and class name case mismatch

Forms

    Form: added IS_NOT_IN
    Forms\Helpers::exportRules() correctly exports empty arrays
    Forms: allow Form::VALID only in the addConditionOn
    FormMacros: better error messages
    SelectBox: is not required when size > 1
    Validator: pattern: supports back reference
    __toString handles Throwable errors
    netteForms.js: validator 'equal' compares values as PHP strings

HTTP

    IRequest: added PATCH method constant
    Fix FileUpload::move($dest) when low permission to chmod

Neon

    Neon\Decoder: fixed entity value conversion in the entity chain

Latte

    BlockMacros: fixed enabling snippetMode in the dynamic snippetArea
    Latte\Parser::parseMacroTag() fixed extraction of modifier
    Parser: || is not modifier separator
    Engine: fixed CompileException sourceLine on PHP7
    FileLoader: error message explaining touching, when touch() fails

Tracy

    added Debugger::$showBar, can disable debug bar
    Bluescreen: link to google opens in new window
    Bar: add xdebug version to info panel
    bar.js: MouseEvent.buttons is not supported by Safari
    Dumper: support for general object exporter which is called for every object
    Dumper: object exporters are called in order from most specific to general
    Debugger: removes output buffer for Bar, Bluescreen and production error. It decides whether clean or flush output buffers.
    Dumper: variable term=xterm-256color enables colors


2.3.8 - Dec 3, 2015

    compatiblity with PHP 7, supports Throwable etc…
    Route: action is mandatory when defined as 'Presenter:'
    UIMacros: better error message
    TracyBridge: prints template name although is not file
    Configurator: DI container cache key depends on PHP minor version
    Cache: fixed deadlock when exception is thrown in fallback nette/caching#36
    CacheMacro: added warning Modifiers are not allowed here
    Selection::insert() fixed delimiting of FQN sequence name like 'aaa.bbb' nette/database#108
    ActiveRow: optimization
    tested on AppVeyor
    DI: Compiler, CompilerExtension: shows suggestions for unexpected config items and extensions, better error message
    FormMacros: added warnings Modifiers are not allowed here
    Form::$onSuccess and Container::$onValidate must be array of Traversable
    netteForms: updated regexp for URL and email validation nette/nette#1539 nette/nette#1540
    SmtpMailer: used stream_socket_client instead of fsockopen nette/mail#19
    Messages: fixed regexp for propagating links nette/mail#18
    PhpGenerator: ClassType, Method: class types are not resolved when namespace is not specified nette/php-generator#21
    Strings::toAscii() optimization
    ObjectMixin::getSuggestion() better balance, replacement of prefix get|set|add|has|is costs 20
    Callback::invokeSafe() removes function name also with arguments from error message
    Latte Parser: used possessive quantifiers and atomic grouping (prevents 500 error)
    Engine: throws CompileException when template contains parse error
    CoreMacros: {else if} throws warning "Did you mean {elseif}"
    Macroset: checks for allowed arguments
    Latte Filters: improved HTML comments escaping nette/latte#87
    Debugger: reserves some memory that is used when error "Allowed Memory Exhausted" occurs
    Debugger: cleans output buffers on strictMode error
    Debugger: error exit code changed from 254 to 255 for Error
    Debugger: more readable exceptions in console
    Helpers::editorUri default $line is 1; line is required by open-editor.js
    Dumper: fixed live-dumping of floats like '1.0'
    bluescreen: bigger exception/error message


2.3.7 - Oct 14, 2015

„Did you mean?“ feature

    Database Row, ActiveRow: shows suggestions for undeclared columns
    Tracy: shows suggestions for some errors and notices (see)
    Nette\Object: suggestions for undeclared methods and properties (see)
    Latte: missing macros and filters
    component Container: shows suggestions for missing components

Application

    RoutingPanel: redesign, added HTTP method
    Presenter: better exception messages
    PresenterComponentReflection::convertType() support for all built-in PHP typehints
    PresenterComponentReflection::convertType() converts NULL to appropriate type
    added Nette\Application\Responses\CallbackResponse
    ErrorPresenter: returns CallbackResponse
    removed rarely used @property phpDoc

Database

    Selection: Fixed infinite loop when accessing to deleted row
    SqlsrvDriver: support for limit and offset on SQL Server 2012
    drivers: fixed applyLimit for $limit = 0
    drivers: applyLimit() throws exception for negative values (but not when you use page())
    Selection: fixed bug with zero in primary key
    Selection: referenced cache cleared only for root selection (not in GroupedSelection)
    SqlsrvDriver::applyLimit(): supports keywords DISTINCT and ALL after SELECT
    SqlBuilder: removed "AS" keyword in JOINs
    Structure: added columns analyze for views

DI

    ContainerBuilder: added support for PHP7 type hints
    DecoratorExtension: implemented decorating by factory interface
    PhpExtension: NULLs are skipped.
    NeonAdapter: fixed dump() for data with simple Nette\DI\Statement

Forms

    CheckboxList: added containerPrototype and itemLabelPrototype
    FormMacros: added warnings Modifiers are not allowed here
    Form::$onSuccess and Container::$onValidate must be array or Traversable
    netteForms: updated regexp for URL and email validation

Mail

    Message: propagates links target from HTML message to plaintext version

PhpGenerator

    added support for anonymous classes
    Method, Parameter: added support for PHP 7 type hints
    Method, Parameter, Property: added constructors
    PhpNamespace::unresolveName() supports for built-in types and PHP 7 types

Tracy

    Debugger::barDump() dumps basic location by default
    Helpers::editorLink() improved way how file names are shortened
    Logger: fixed severity in formatMessage()
    fixes for PHP 7, added new examples

Latte

    added warnings: Modifiers are not allowed here
    BlockMacros: fixed trimming of block
    BlockMacros: fixed child template without block
    Parser: fixed substr_count() error on empty string

Utils

    Random: use random_int() on PHP 7
    Random: charlist now contains only unique characters
    Random: rejects openssl_random_pseudo_bytes result when it is not cryptographically strong
    Image: fixed color allocation in palette-based images
    ObjectMixin: added getExtensionMethods()
    ObjectMixin: added warning when method-getter is used by mistake (for getters without parameters) (BC break) See note.

Sandbox

    Error & Error4xx presenters


2.3.6 - Oct 12, 2015


2.3.5 - Aug 23, 2015

    Presenter: fixed signal in POST in ajax request
    Selection: added fetchField()
    Structure: added rebuild when table not exists in cache
    Structure: throws proper exception when table doesn't exists
    Neon\Encoder: added support for entity chaining
    PhpGenerator, added support for build-in types callable, self, parent, better whitespace usage
    Strings: added const for trim method whitespace charset
    Json: accept whitespace-surrounded "null" for decode() as it is a valid JSON text
    Image: fix exception message
    Html, Latte: chars '<' in attributes are encoded in XHTML
    Latte\Engine: added warmupCache()
    Debugger Bar: fixed dragging in Firefox when cursor leaves the browser window
    BlueScreen: collapse paths usable with files
    Logger: better readability of exception file name


2.3.4 - Jul 20, 2015

    improved coding style
    travis: migrating to container-based infrastructure
    travis: testing with lowest dependencies
    Control: global snippet changed from NULL to \0 to be distinguished from ''
    UIMacros: {snippet} and {snippetArea} without name has name '' in both PHP 5 and PHP 7
    UIMacros: runtime helpers moved to UIRuntime
    ApplicationExtension: missing RobotLoader throws exception
    Database\Helpers::loadFromFile() uses native exec() without logging and creating result set
    Selection: fixed exception namespace
    Forms\Helpers::createSelectBox: added parameter $selected
    ChoiceControl, MultiChoiceControl: added $checkAllowedValues
    ChoiceControl, MultiChoiceControl: renamed 'range' to 'set' in exception
    Session: session ID is not regenerated when not set
    added Mail\SendException
    Callback::invokeSafe() workaround for HHVM bug facebook/hhvm#4625
    Callback::invokeSafe() removes function name from error message
    Random: /dev/urandom is not used on Windows
    PhpWriter, CoreMacros: microoptimizations
    Tracy: support for PHP7 Throwable
    Logger::getExceptionFile() is public
    Bar: live data for previous request are stored in session
    bar.css: added text-shadow reset


2.3.3 - Jun 17, 2015

    Configurator: DecoratorExtension is called after ApplicationExtension to allow decorate presenters
    Component: attached() is called only once for each object
    Database: Selection: Related prototype depends on specific cache key
    DI: ContainerBuilder::removeDefinition() removes definition from $classes
    netteForms.js: works only with Nette forms, fixed toggle in IE < 9
    Checkbox, CheckboxList, RadioList: fixed rendering of and
    Nette\Http\Helpers: fixed bug in ipMatch() for IPv4
    SmtpMailer: improved exception message on write failure
    Nette\Mail\Message: added getAttachments()
    Image::fromString() undeprecated argument $format
    Arrays: added pick() - picks element from the array by key and return its value
    Strings: added after() and before()


2.3.2 - May 6, 2015

    PresenterComponent::redirect() fixed compatibility with func_get_args() in HHVM & PHP 7
    ApplicationExtension: changed linkGenerator dependency from Nette\Http\Request to Nette\Http\IRequest
    Presenter: "query" link syntax is un-deprecated
    SQLiteStorage: fixed transaction execution
    ResultSet: parameters are passed to statement via bindValue with correct type
    Selection::fetchAssoc fix
    Database: fixed infinite recursion when using StaticConventions and trying to access undefined column
    ContainerBuilder: fixed reseting of $currentService
    netteForms.js: a lot of fixes
    FormMacros: <label n:name></label> is rendered as is, without caption
    Form::fireEvents() calls onError even after last onSuccess handler
    RadioList & CheckboxList: getControlPart() normalizes key type
    Url: fixed isEqual() for same param values & regular sorting on numbers
    Latte: HtmlNode::$isEmpty is TRUE for shortcuts like in HTML mode
    Logger: added fromEmail option to set From header
    Logger: suppress timezone warning
    Bar: info bar show HHVM version if is running on HHVM


2.3.1 - Mar 27, 2015

    FileResponse: encodes filename in Content-Disposition according to RFC 5987
    ApplicationExtension: uses file in temp dir to invalidate container
    CacheMacro: createCache has support for defining dependencies as a fallback
    ActiveRow: added support to update primary columns via update()
    MySQL: added support for objects DateInterval in column TIME
    Revertes "SqlPreprocessor: fixed IN (?) with empty array" (possible BC break)
    Table: fixed Selection::getReferencedTable() always refetching when primary is NULL
    ContainerPanel: displays compilation time when container is compiled
    FormMacros: empty <label n:name /> displays caption, as {label /} does
    FormMacros: added support for <button>
    netteForms.js: supports Common.JS and AMD loading
    Neon::encode: removed trailing spaces
    Latte: <script> with type text/json is escaped as javascript
    Latte: improved macro {dump}
    Tracy: fixed compatibility with MooTools and some plugins
    TracyExtension: added option logSeverity
    added tool ClassUpdater
    and some fixes


2.3.0 - Feb 25, 2015

Application

    all presenters are created by Dependency Injection container
    added LinkGenerator
    Presenter: changed handling of invalid link, they triggers warnings on production and are configurable on development via 'silentLinks'
    Routing: speed optimization & caching
    added bridges for Nette DI
    added Request::getParameter(), deprecated Request::isPost()

BC breaks:

    routes and presenter names are case sensitive. Nette will warn you if you use the wrong case in presenter name. But due to performance limitation it is not checking Route mask - you should check them manually. Correct is <presenter=UpperCasedDefaultValue> and <presenter url-cased-regexp-mask>.
    Route::addStyle() & Route::setStyleProperty() are deprecated and now will trigger E_USER_DEPRECATED
    removed support for deprecated Nette\Templating, template extension .phtml and old link syntax

Bootstrap

    in config file you can move all sections placed in nette to one level up. If you move up one of the sections container, mailer or debugger, rename it to di, mail and tracy.
    added Configurator::addServices()
    uses new DI\ContainerLoader
    removed deprecated constants Configurator::DEVELOPMENT & PRODUCTION (BC break)
    Configurator::setDebugMode() accepts only bool / string / array

Caching

    FileStorage: removed usage of realpath()
    added bridge for Nette DI
    ancient and deprecated ArrayAccess syntax $val = $cache[$key] or $cache[$key] = $val triggers E_USER_DEPRECATED. Use please $cache->load($key) and $cache->save($key, $val)

Database

    throws own exceptions:
        DriverException, ConnectionException
        ConstraintViolationException, ForeignKeyConstraintViolationException, NotNullConstraintViolationException and UniqueConstraintViolationException
    added support for += and -= in UPDATE statement
    added support for operators in WHERE & AND
    implemented ?and ?or ?set ?values ?order ?name
    added support for '.' in column names
    forbidden syntax 'sql', 'sql', ..., i.e. after every SQL string must be at least one parameter
    SqlLiteral is parsed using SqlPreprocessor
    table and column names in joins can begin with number or underscore
    classes *Reflection split into with *Conventions & Structure
    added IRowContainer::fetchAssoc(), ISupplementalDriver::convertException() (BC break)
    PgSqlDriver: fixed formatLike() #46
    MySqlDriver by default uses utf8mb4 encoding for MySQL >= 5.5.3 instead of utf8 (possible problem)
    Connection: undeprecated some methods
    DatabaseExtension: added alias 'database.x.connection' for 'database.x'
    to ensure that new SQL translator do the same job as older one, you can install special tool named CompatibilityChecker22

Deprecated

new package for deprecated stuff
DI

    parameters auto-resolution for generated factories
    service aliases
    removed ServiceDefinition & Statement magic methods (makes it 3× faster)
    added DecoratorExtension, DIExtension and InjectExtension
    added CompilerExtension::validateConfig()
    ExtensionsExtension: allows to pass params
    dynamic services
    chained syntax Class::method()::method()::method()
    removed dependency on nette/reflection
    ContainerFactory replaced with light ContainerLoader
    ContainerBuilder: implement escaping of '@' at the beginning of string
    Compiler: added addConfig() & loadConfig(), compile() returns ClassType[]

BC breaks:

    Container & ContainerBuilder::findByType() returns all services, including non-autowired
    class names are case sensitive
    removed support for placing services inside extension section in configuration file
    removed support for dynamically added extensions

Finder

    Finder::filter() callback always receives as argument (at least) a FilesystemIterator
    Finder is countable

Forms

    fixed some limitations of netteForms.js
    TextBase: input is not silently truncated to max-length
    TextBase::addFilter() is processed during validation, added Rules::addFilter()
    now you can add filters to conditions $input->addCondition(...)->addFilter(...)
    to Container::onValidate callbacks are passed values via second parameter

    added bridge for Nette DI

    internal filtering methods like Nette\Forms\Controls\TextBase::filterFloat was removed
    internal validation methods like Nette\Forms\Controls\TextBase::validateFloat was moved to Nette\Forms\Validator, as well as Rules::$defaultMessages
    Buttons and Hidden fields are generated without HTML ID. Relying on autogenerated ID is very bad, if you want ID, set it via setHtmlId()
    RadioList items are generated without ID too. You can enable it via $radioList->generateId = TRUE. But again: set you base ID via setHtmlId()
    DefaultFormRenderer adds classes to inputs & label only during rendering process (BC break)

Http

    RequestFactory: speed optimizations
    Url: internally stores query parameters as array, improved canonicalize(), etc…
    added briges for Nette DI
    added Helpers::formatDate(), added IResponse::getHeader() (BC break)
    Request::getUrl() is immutable
    Response::date(), Request::isPost() & Request::getFile() with multiple keys are deprecated

Latte

    template is wrapped in an class → much faster repeated rendering
    faster loading from cache file
    faster autoloader for non-Composer usage
    {ifset block} & {elseifset block} without #
    parser detects for unclosed / malformed macros (nette/nette#711)
    added support for <script type="text/html"> (#24 & nette/nette#705)
    added macro {php …} as replacement for {? …}
    fills Html::$attrs with actual attribute values
    "words" can contain concatenation dots (i.e. {include $dir . '/template.latte'} #26)
    combination of n:class & class leads to exception

Mail

    added bridge for Nette DI
    variable $mail is not automatically passed to templates, you have to do it yourself (BC break) (but better than {var $mail->subject = "Your new order"} is this <title>Your new order</title>, isn't it?)
    if you have linked images (with relative paths) in template, pass base file path to images as second parameter to setHtmlBody()
    Message: removes from body

Neon

    chained syntax first(a, b)second(1, 2)

Php Generator

    generating PHP files with multiple namespaces & classes
    removed magic methods (makes it much faster)
    splits long lines, uses single-quotes strings when possible
    short phpDoc for properties

Reflection

    added Helpers::getDeclaringClass()
    added bridge for Nette DI

Robot Loader

    added support for loading from Phar
    removed usage of realpath()
    is now case sensitive and will warn you if you use the wrong case in class name

Safe Stream

    it is recommended to change protocol safe://... to namespaced nette.safe://...
    protocol is registered automatically, no longer need to call SafeStream::register()

Security

    added bridge for Nette DI

Tracy

    Bluescreen & Debug Bar: 10× smaller HTML code, 10× faster, deeper depth of dumps
    Debug Bar: redesigned, uses vector icons
    Bluescreen: dumps contain location of class definition (can be opened in editor with ctrl key)
    Bluescreen: added link "skip error" to suppress strictMode
    Bluescreen: added Exception panel
    added Tracy\ILogger and rewritten default Logger
    Debugger::enable() implements checking of cookie (format cookie@ip.address)
    customizable 500 error template via Debugger::$errorTemplate
    Dumper: new options LOCATION_SOURCE, LOCATION_LINK, LOCATION_CLASS
    Dumper: customizable object exportes
    completely rewritten JavaScript, now requires IE 10+ (removed tracyQ.js)
    added bridge for Nette DI

Utils

    added Arrays::normalize(), Callback::invokeSafe(), Html::data(), Strings::firstLower()
    Image::from() throws ImageException when is unable to decode file
    Image::place() fixes support for alpha channel
    Callback::closure() returns native closures since PHP 5.4
    Strings::chr() throws Nette\InvalidArgumentException if code point is not in valid range
    Validators::isUrl() accepts underscores in subdomains


2.3.0-RC - Feb 18, 2015

    deprecated Route::addStyle() & Route::setStyleProperty() trigger E_USER_DEPRECATED
    Cache: deprecated ArrayAccess ($cache[$key] = $val instead of $cache->save($key, $val) etc) triggers E_USER_DEPRECATED
    DI: fixed some bugs, fixed thread-safety issues
    DI: improved ContainerLoader & Compiler & Configurator usability (will be described later)
    Forms: un-deprecated addFilter(), now is integrated to rules
    Forms: fixed some limitations of netteForms.js
    Latte: fixed bug in parser
    Mail: removed deprecation notices for Nette\Templating and Nette\Application\UI\ITemplate
    Mail: if you use in template variable $mail, you have to pass it manually
    removed some deprecated stuff that triggers errors in Nette 2.1 / 2.2


2.3.0 beta3 - Feb 13, 2015

    Application: reverted disabled canonicalization for restored requests
    Http: reverted that script path detection is case-sensitive
    DatabaseExtension: fixed autowiring of multi connections
    Database: SqlProcessor converts objects with __toString to strings
    DI: removed support for dynamically added extensions (BC break!) [Closes nette/di#50]
    DI: removed support for section services inside extensions (BC break)
    DI: InjectExtension is called as the last one [Closes nette/di#53]
    Parser: fixed syntax=off

bonus:

    vector icons on Tracy Bar

All components are finished. Only nette/application is in beta phase, because nette/application#4 is not merged yet.


2.3.0 beta2 - Feb 6, 2015

    Application: reverted that action name can begin with number
    Application: uses native ReflectionClass
    PresenterFactory: fixed compatibility with case mismatched presenter names
    Bootstrap::setDebugMode - argument must be string|array|bool
    DI: removed dependency on nette/reflection
    DI: magic methods replaced with native ones (is 3× faster)
    DI: implemented escaping of '@' at the beginning of string
    DI\Container::findByType() returns all services, including non-autowired (BC break!!)
    Forms: reverted that addText, addPassword, addTextArea: parameter $cols is deprecated
    Forms: added deprecation warning to deprecated addFilter()
    Forms: added RadioList::$generateId that enables generating of ID
    PhpGenerator: magic methods replaced with native ones
    RobotLoaders: warns on case mismatch on class name
    … and some bugs fixed

All components are finished. Only nette/application is in beta phase, because nette/application#4 is not merged yet.


2.3.0-beta - Jan 31, 2015

Application

    all presenters are created in Dependency Injection container
    added LinkGenerator
    Routing: speed optimization & caching, action name can begin with number

BC breaks:

    removed case insensivity for presenter and action names
    removed support for deprecated Nette\Templating, template extension .phtml and old link syntax

not merged yet:

    MessagesStorage & RequestStorage #4

Bootstrap

    added Configurator::addServices()
    removed constants Configurator::DEVELOPMENT & PRODUCTION (BC break)

Caching

    FileStorage: removed usage of realpath()

Database

    throws own exceptions:
        DriverException, ConnectionException
        ConstraintViolationException, ForeignKeyConstraintViolationException, NotNullConstraintViolationException and UniqueConstraintViolationException
    added support for += and -= in UPDATE statement
    added support for operators in WHERE & AND
    implemented ?and ?or ?set ?values ?order ?name
    added support for '.' in column names
    classes *Reflection split into with *Conventions & Structure
    added IRowContainer::fetchAssoc(), ISupplementalDriver::convertException() (BC break)
    MySqlDriver: uses utf8mb4 encoding for MySQL >= 5.5.3
    Connection: undeprecated some methods

Deprecated

new package for deprecated stuff
DI

    parameters auto-resolution for generated factories
    added support for service aliases
    added DecoratorExtension, DIExtension and InjectExtension
    added CompilerExtension::validateConfig()
    ExtensionsExtension: allows to pass params
    dynamic services
    chained syntax Class::method()::method()::method()

not merged yet:

    better CompilerBuilder API

Finder

    Finder::filter() callback always receives as argument (at least) a FilesystemIterator

Forms

    to Container::onValidate callbacks are passed values via second parameter
    added bridge for Nette DI
    Rules::$defaultMessages and all validating methods in BaseControl and it's descendants moved to Nette\Forms\Validator

BC breaks to be discussed:

    addText, addPassword, addTextArea: parameter $cols is deprecated
    buttons and hidden fields are generated without HTML attribute ID by default

not merged yet:

    setTranslator(NULL) will not stop translate label (#58)
    IValidator as base class for own validators

Http

    RequestFactory: speed optimizations
    Url: internally stores query parameters as array, improved canonicalize(), etc…
    added Helpers::formatDate()
    added IResponse::getHeader() (BC break)
    Request::getUrl() is immutable
    Response::date(), Request::isPost() & Request::getFile() with multiple keys are deprecated

Latte

    template is wrapped in an class › much faster repeated rendering
    faster loading from cache file
    {ifset block} & {elseifset block} without #
    added macro {php …} as replacement for {? …}
    faster autoloader for non-Composer usage
    fills Html::$attrs with actual attribute values
    "words" can contain concatenation dots (i.e. {include $dir . '/template.latte'} nette/latte#26)
    parser detects for unclosed / malformed macros (nette/nette#711)
    added support for <script type="text/html"> (nette/latte#24 & nette/nette#705)
    combination of n:class & class leads to exception

Mail

    deprecated support for Nette\Templating

Neon

    chained syntax first(a, b)second(1, 2)

Php Generator

    generating PHP files with multiple namespaces & classes
    short phpDoc for properties

Reflection

    added Helpers::getDeclaringClass()

Robot Loader

    added support for loading from Phar
    removed usage of realpath()

Safe Stream

    added protocol nette.safe://, alias for safe://

Security

    User: bool parameters replaced with flags, i.e. $user->setExpiration('20 minutes', TRUE, TRUE) › setExpiration('20 minutes', $user::BROWSER_CLOSED | $user::CLEAR_IDENTITY)

Tracy

    Bluescreen & Debug Bar: 10× smaller HTML code, 10× faster, deeper depth of dumps
    Bluescreen: dumps contain location of class definition (can be opened in editor with ctrl key)
    Bluescreen: added link "skip error" to suppress strictMode
    Bluescreen: added Exception panel
    added Tracy\ILogger and rewritten default Logger
    Debugger::enable() implements checking of cookie (format cookie@ip.address)
    customizable 500 error template via Debugger::$errorTemplate
    Dumper: new options LOCATION_SOURCE, LOCATION_LINK, LOCATION_CLASS
    Dumper: customizable object exportes
    completely rewritten JavaScript, now requires IE 10+ (removed tracyQ.js)

Utils

    added Arrays::normalize(), Callback::invokeSafe(), Html::data(),
    Image::from() throws ImageException when is unable to decode file
    Callback::closure() returns native closures since PHP 5.4
    Strings::chr() throws Nette\InvalidArgumentException if code point is not in valid range
    Validators::isUrl() accepts underscores in subdomains


2.2.7 - 2015-01-06

    Json: workaroud for PHP fatal error caused by \u0000 at the beginning of key
    RequestFactory: optimized UTF-8 validation performance
    Url::unescape() optimized for performance
    speed optimization for Object, Strings::length(), Strings::substring()
    Tracy: 500 error page is better displayed as part of page
    RoutingPanel: improved dumping of objects
    MemcachedStorage: the key must not include control characters or whitespace
    ExtensionsExtension: Allow passing parameters to extension constructor
    ContainerFactory: rewritten caching mechanism to not use fopen
    BaseControl: allow passing objects to translator in control
    netteForms.js: getValue returns bool for checkbox
    UserPanel: is rendered only when headers are not sent (fixes bug introduced in v2.2.6)
    Strings::toAscii(): unsupported characters are removed instead of being replaced with '?'
    Html: floats in attributes are printed in natural notation
    DI: annotations @inject can be defined in traits
    Neon: support for unicode surrogate pairs, improved encoding of strings


2.2.7 RC - 2014-12-29

2.2.6 - 2014-11-16

    Http\Response: workaround for PHP bugs #61106 and #66375
    Http\Response::redirect() link is printed only for https? protocol
    Tracy: fixed positioning of window
    Tracy\OutputDebugger: stack is printed in title


2.2.5 - 2014-11-15

2.2.4 - 2014-10-26

Forms:

    CsrfProtection: token is expired after regenerateId() (i.e. after logout) security fix!
    CsrfProtection: ignores setValue(), is not erased by Form::setValues
    Form: calling setAction() bypasses creation of 'do' element
    DefaultFormRenderer: support for setOption('id') for groups
    RadioList: added item label prototype
    Container: added addMultiUpload()
    TextBase: added setMaxLength()
    TextInput: removed empty value=""
    TextBase::setEmptyValue() can contain space at the end of the value
    fixes in netteForms.js

Tracy:

    fixed double calling Debugger::enable(), Debugger: $logSeverity in development mode, CSS
    BlueScreen: collapsePaths is set to /vendor dir
    create-phar: minification for JS & CSS
    Debugger: removed error message in non-HTML production mode
    TracyBridge initialization moved from NetteExtension to Configurator

others:

    supported $configurator->addConfig(array(...configuration...))
    Template: added __call() for BC
    Route: %domain% and %tld% works with IP
    SqlPreprocessor: fixed non-associative array detection
    Http\Response: Added missing HTTP status codes as constants
    Url::isEqual: fixed comparing of indexed arrays
    UserPanel: is rendered only when headers are not sent
    DateTime: createFromFormat returns FALSE on failure
    Latte: implemented {elseifset #block}
    Latte: allows load templates from phar file
    Database: strings in Tracy Bar are correctly escaped
    Http: fixes in phpDoc


2.2.4 RC - 2014-10-26

2.2.3 - 2014-08-28

Fixes:

    new way how to detect errors in native PHP function (used in Session, Mail, Strings, …)
    DI: fixed inheritance
    Database & DI: fixes autowiring for multiple connections
    Database: fixed & enhanced support for multiple scheme reflection
    Forms: fixed erasing of manually added errors via addError
    Forms: fixed getHttpData() for multiple file uploads
    Http\Response: added $warnOnBuffer
    Latte: filter |date respects active timezone
    Latte: macro {includeblock} gently trims output
    Mail: fixed headers encoding nette/mail#4
    Mail: setHtmlBody() decodes %XX in URL
    PhpGenerator: ClassType::from processes only own properties
    PhpGenerator: fixed dumping of non-public properties
    Template::registerHelperLoader: removed E_USER_DEPRECATED
    TemplateFactory: added missing filters modifyDate, length & null
    Neon: fixed parsing of:

key1:
- subitem
- subitem

News:

    added support for $configurator->setDebugMode('secret@23.75.345.200'), where secret must match with cookie nette-debug
    added Latte\Engine::invokeFilter(), as a replacement for $template->$filter().
    DI: better exception messages
    NDBT: added support for NULL with operator NOT
    Forms & Latte: prettier output formating
    Tracy: added Debugger::$logSeverity for logging bluescreen for errors/warnings/notices in production mode
    added Validators::isUri()


2.2.3 RC2 - 2014-08-24

2.2.3 RC - 2014-08-13

2.2.2 - 2014-06-26

    Route: allows to use parameters with long names
    FileResponse: send response either as attachment or inline
    UI\Presenter: all services except httpRequest & httpResponse are optional
    Tracy: better error messages when is Tracy unable to log errors
    Latte: added support for empty {var $foo}
    netteForms: toggle related event handler is added only once
    Configurator::setDebugMode(): removed default value
    a lot of bugfixes


2.2.1 - 2014-05-28

    Latte & Nette\Utils\Html: added protection against innerHTML mXSS vulnerability
    Tracy: Dumper prints attribute data-tracy-href only when option 'location' is enabled
    Neon: accepts short bullet syntax:


2.2.0 - 2014-05-11

Nette has been split into small projects:
 - Application
 - Caching
 - ComponentModel
 - Nette Database
 - DI
 - Finder
 - Forms
 - Http
 - Latte
 - Mail
 - Neon
 - PhpGenerator
 - Reflection
 - RobotLoader
 - SafeStream
 - Security
 - Tokenizer
 - Tracy (formerly Nette\Diagnostics)
 - Nette Utils

It also brings complete new Latte API for standalone usage:

    $latte = new Latte\Engine;
    $latte->onCompile[] = function($latte) {
        $latte->addMacro(...);
    };
    $latte->addFilter('money', ...);
    $latte->render('template.latte', $parameters);

Also Nette\Diagnostics was renamed to nice and short Tracy.


2.1.4 - 2014-05-24

    Latte & Nette\Utils\Html: added protection against innerHTML mXSS vulnerability
    Latte: fixed parsing {macro|modifier /}
    Latte: fixed including parent block multiple times
    Latte, DI: improved error messages
    Tracy: Dumper prints attribute data-tracy-href only when option 'location' is enabled
    RadioList: attrs of radiolist label aren't appended to labels of radio
    Database: ResultSet: empty keys are not converted to properties
    Strings::toAscii(): support for czech and french quotation marks
    RobotLoader: works with PHP 5.6 syntax ClassName::class


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.

(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.