Framework

Repository Author Commit message Committed SHA  
 
application by dg removed compatibility for old class names

- inteface Nette\Application\IRouter replaced by Nette\Routing\Router

application by dg compatibility with nette/component-model 4
application by dg composer: increased dependencies versions
application by dg requires PHP 8.3
application by dg opened 3.3-dev
application by dg phpstan fixes
forms by dg netteForms: restructured package, includes UMD and ESM (BC break)
forms by dg netteForms: removed distribution files (BC break)
forms by dg Latte: {formContext}, {formContainer}, {formPrint} & {formClassPrint) are deprecated
forms by dg BaseControl::$disabled is bool, added $disabledChoices
forms by dg Container::getControls() returns list instead of iterator with names (BC break)
forms by dg Container: only Control/Container can be added to form (BC break)
forms by dg added type hints (BC break)
forms by dg removed deprecated CsrfProtection control and related code

Deleted CsrfProtection class, its tests, ProtectorId constant, and validation message.
The addProtection() method now only triggers a deprecation warning.

forms by dg added #[\Deprecated] attributes and trigger_error() to deprecated members
forms by dg composer: increased dependencies versions
forms by dg removed compatibility for old class names
forms by dg opened 4.0-dev
forms by dg added CLAUDE.md
forms by dg FormNode: {form detached name} for layouts that nest other forms

HTML forbids nested <form> tags, so a layout embedding a component that
renders its own <form> can't wrap its controls in another <form>. The
detached keyword emits an empty <form>...</form> at the opening position
and links every control back to it via the HTML5 form= attribute
(applied in Runtime::item()), so inputs submit correctly wherever they
sit in the DOM. Controls in nested containers and {form scope} inherit
the same link.

Unlike {form scope}/{formContext}, detached does render a <form>, so it
still accepts arguments, which apply to that tag.

Throws InvalidStateException when detached is used with a non-Form
Container or a form without an id.

forms by dg FormNode: {form scope name} as an alternative to {formContext name}

The scope keyword before the form name makes {form} skip the <form>
tag while still pushing the form on the stack, so {input}/{label}/
{inputError} resolve against it. When nested inside another form, scope
resolves the name relatively to it (like {formContainer}); at the top
level it looks the name up in the registry. {formContext} keeps its
legacy behavior of always resolving from the registry.

Passing arguments to {form scope} or {formContext} now throws, since
neither renders a <form> tag to apply them to.

forms by dg FormNode: deprecate missing comma before {form} arguments

The {form name attr=val} syntax (no comma between the name and the
attributes) was tolerated. Trigger E_USER_DEPRECATED when a token
follows the name without a comma, pointing to the offending column.
The form still compiles — this only nudges users toward the canonical
{form name, attr=val} so future syntax extensions can use bare
keywords next to the name unambiguously.

forms by dg addSubmit() added $onSubmit parameter
forms by dg RadioList, CheckboxList: getControlPart() and getLabelPart() throw exception for invalid key

- ChoiceControl, MultiChoiceControl: extracted getItem() method

forms by dg Container::setValues() and setDefaults() accepts iterable|stdClass (BC break)
forms by dg deprecated protection using CSRF token

Protection using Sec-Fetch and Origin headers is comprehensive, as they cannot be spoofed even if there is an XSS vulnerability on the server

forms by dg better protection against CSRF by checking same-origin via Sec-Fetch-Site header instead of SameSite
forms by dg Latte: rewritten Runtime as non-static class
forms by dg requires Latte 3.1
forms by dg removed support for Latte 2
forms by dg compatibility with nette/component-model 4
forms by dg removed deprecated stuff

Last synchronization: 2026-06-25 20:02:47