Framework

Repository Author Commit message Committed SHA  
 
bootstrap by dg used #Deprecated
bootstrap by dg renamed PhpExtension -> PhpIniExtension
bootstrap by dg opened 4.0-dev
bootstrap by dg added CLAUDE.md
bootstrap by dg Extensions: converted to #[Hook] handlers
bootstrap by dg requires nette/di 3.3
bootstrap by dg Configurator: added DI extensions auto-discovery from installed packages

Extensions declared in composer.json under extra.nette.di-extensions
are discovered from vendor/composer/installed.json and registered
automatically. Constructor arguments may use %parameter% placeholders.

Ordering and precedence: $defaultExtensions keep their hand-tuned
registration order and are registered first; discovered extensions
are appended after them, sorted alphabetically by name, because the
order in installed.json carries no meaning. Defaults take precedence
over discovered extensions of the same name.

This starts the gradual emptying of $defaultExtensions: decorator, di,
extensions, inject and search are no longer listed there because they
are discovered from nette/di metadata (a hard dependency, so always
present). Bootstrap's own constants and php extensions must stay for
now - the root package is not listed in installed.json.

excludeExtension() excludes given extensions from automatic
registration; without arguments no extensions are registered at all.
Exclusions are part of the container cache key.

di by dg removed Statement compatibility shims from expression classes WIP
di by dg deprecated magic properties (BC break)
di by dg removed compatibility for old class names
di by dg removed Definition::generateMethod() (BC break)
di by dg removed deprecated stuff

- %parameters%
- three ... dots
- @inject & @var

di by dg opened 4.0-dev
di by dg použít function() WIP
di by dg added CLAUDE.md
di by dg PartialCall supports argument placeholders (PHP 8.6 partial application)
di by dg added expression classes (Call, Instantiation, ConstantFetch, Expansion, PropertyAccess, ServiceCollection, SpecialFunction, PhpCode)
di by dg added PartialCall, expression representing PHP first-class callable syntax
di by dg ServiceDefinition: creator can be any Expression

enables first-class callable in 'create:'

di by dg Expression::transformValues() used by Helpers to traverse expressions
di by dg Expression::complete() replaces Resolver::completeStatement() & normalizeReference()
di by dg Expression::resolveType() replaces Resolver::resolveReferenceType() & resolveEntityType()
di by dg Expression::generateCode() replaces PhpGenerator::formatStatement()
di by dg Reference moved to Nette\DI\Expressions namespace (original name kept as deprecated alias)
di by dg added Definitions\Expression, common base class for Reference & Statement
di by dg Resolver: used withCurrentServiceAvailable() to control $currentServiceAllowed
di by dg added DI extensions auto-discovery metadata
di by dg ParametersExtension: split afterCompile() into separate Compile hooks

Demonstrates multiple hooks within a single phase: static parameters,
dynamic parameters and dynamic validators are now generated by three
independent handlers running in declaration order.

di by dg Extensions: converted built-in extensions to #[Hook] handlers

Explicit ordering constraints replace the former hardcoded reordering
hacks in Compiler (InjectExtension moved last, SearchExtension inserted
before DecoratorExtension):

- SearchExtension: split into Register hook (directory scan) and
Discover hook (registration of classes not yet in the container)
- DecoratorExtension: Modify hook with before: InjectExtension
- InjectExtension: Modify hook with after: '*'
- DIExtension: Register/Modify/Compile hooks

di by dg Compiler: phase-based compilation system with #[Hook] attribute

Extensions can now register handlers for five semantic compilation
phases (Setup, Register, Discover, Modify, Compile) via the #[Hook]
attribute with declarative before/after ordering constraints:

- handlers are sorted topologically (Kahn), ties keep registration
order, so legacy extensions relying on registration order behave
exactly as before
- before/after targets are matched via is_a(), so subclasses match
- hook owner is tracked as extension instance, multiple instances
of the same class do not collide
- legacy loadConfiguration/beforeCompile/afterCompile methods are
mapped to Register/Modify/Compile phases and deprecated
- ParametersExtension, ExtensionsExtension and ServicesExtension
converted to hooks as the pipeline itself depends on them

di by dg added Bridges\DIPsr\PsrContainer exposing the DI container as PSR-11
di by dg added preferredOnly parameter to Container::findAutowired() for side-effect-free autowiring resolution

Last synchronization: 2026-07-08 18:02:37