Releases: nette/component-model
Released version 4.0.0 RC
A focused, modern major release. The component model drops legacy baggage, demands PHP 8.3+, and ships a smarter monitoring system that finally behaves predictably when listeners reshape the tree. If you've been carrying around deprecated attached()/detached() hooks or the magic getComponents() parameters, this is your cue to clean up – the payoff is a leaner, stricter, more reliable foundation.
💥 Breaking Changes
-
Monitoring handlers now fire top-down (ancestor → descendant). When a subtree is attached,
monitor()listeners are invoked from the outermost ancestor inward, matching the natural order of tree construction. The new implementation is robust against listeners that mutate the tree mid-flight: it re-checks validity before descending into children, deduplicates so the same listener never runs twice, and guards against reentry to prevent infinite loops. If your code relied on the old ordering, review listeners that depend on sibling or parent state. -
attached()/detached()methods removed. These long-deprecated lifecycle hooks are gone. Migrate to explicit callbacks: replace overriddenattached($obj)/detached($obj)withmonitor($type, attached: ..., detached: ...). Callingmonitor()with no handler at all now throws anInvalidStateException– at least one ofattachedordetachedis required. -
Container::getComponents()parameters removed. The method now takes no arguments and returns a plainarrayof immediate children (previouslyiterable). The old recursive flag and filter-type argument are gone – passing them throws aDeprecatedException. For recursive traversal usegetComponentTree()instead. The internalRecursiveComponentIteratorhas been removed. -
IContainer::addComponent()signature tightened. Now declared asaddComponent(IComponent $component, ?string $name): static. Implementations and callers must match the new return type hint. -
Nette\SmartObjectdropped fromComponent. The component no longer pulls in theSmartObjecttrait, and the magic$name,$parent, and$componentsproperties are gone. Use the explicit methods (getName(),getParent(),getComponents()) directly. -
IComponent::NAME_SEPARATORremoved. UseIComponent::NameSeparatorinstead. -
PHP 8.3 required.
Release version 3.2.0
A transitional release ahead of 4.0. Nothing is removed yet, this version just lights up deprecation notices on things that will disappear in 4.0, so you can get your code ready in peace.
💥 Deprecated (will be removed in 4.0)
- Magic properties
Component::$name,Component::$parentandContainer::$components– usegetName(),getParent(),getComponents()instead. - Calling
monitor($type)without callbacks – pass them directly:monitor($type, $attached, $detached). Overridingattached()/detached()in subclasses is on its way out. - Constant
IComponent::NAME_SEPARATOR– switch toIComponent::NameSeparator(the deprecation is now reported via the native#[\Deprecated]attribute).
Released version 3.1.4
A focused maintenance release for the Component layer. The headline is hardening of the monitor callback machinery: nested re-entry is now safely guarded, callbacks are normalized to \Closure for consistent deduplication, and the whole codebase has been brought under mandatory static analysis with nette/phpstan-rules.
- Reentry protection for monitor callbacks –
Component::refreshMonitors()now refuses to re-enter itself while listeners are running. If a listener removes and re-adds the same component (or otherwise triggers another refresh), each component is processed exactly once instead of looping or double-firing. - Reliable callback deduplication – switched the in-array check for monitor callbacks to loose comparison. Closures are never
===to each other unless they are literally the same instance, so the previous strict check silently let duplicates through. - Adopted
nette/phpstan-rules– stricter ruleset enabled, with a dedicatedtests/types/component-types.phpdriving type tests.
Released version 3.1.3
support for PHP 8.5
Released version 3.1.2
- support for PHP 8.5
- optimized global function calls
Released version 3.1.1
- support for PHP 8.4
- improved phpDoc
Released version 3.1.0
- requires PHP 8.1
- uses PHP 8.1 features
- added
Container::getComponentTree() Container::getComponents()parameters are silently deprecated, returns array when $deep is false (BC break)
Released version 3.0.3
- composer: allows nette/utils 4.0
- constants are PascalCase
Released version 3.0.2
- support for PHP 8.1
Released version 3.0.1
- Container: component name may be number or null
- Container: added const NAME_REGEXP
- added .phpstorm.meta.php
- fixed bugs reported by PHPStan
For the details you can have a look at the diff.