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