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