Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,27 @@
This extension provides following features:

* `Nette\ComponentModel\Container::getComponent()` knows type of the component because it reads the return type on `createComponent*` (this works best in presenters and controls)
* Array access on components (`$component['name']`) resolves types via `createComponent*` methods
* `Nette\DI\Container::getByType` and `createInstance` return type based on first parameter (`Foo::class`).
* `Nette\Forms\Container::getValues` return type based on `$asArray` parameter.
* `Nette\Forms\Container::getUntrustedValues` return type based on mapping class parameter.
* `Nette\Forms\Controls\BaseControl` fluent methods return `static` instead of `BaseControl`.
* `Nette\ComponentModel\Component::lookup` return type based on `$throw` parameter.
* `Nette\Application\UI\Component::getPresenter` return type based on `$throw` parameter.
* `Nette\Application\UI\Presenter::getSession` returns `Session` or `SessionSection` based on arguments.
* Dynamic methods of [Nette\Utils\Html](https://doc.nette.org/en/2.4/html-elements)
* Magic [Nette\Object and Nette\SmartObject](https://doc.nette.org/en/2.4/php-language-enhancements) properties
* Event listeners through the `on*` properties
* Presenter `@inject` properties are treated as initialized.
* Defines early terminating method calls for Presenter methods to prevent `Undefined variable` errors
* Understand the exact array shape coming from `Nette\Utils\Strings::match()` and `Nette\Utils\Strings::matchAll()` based on pattern
* `Nette\Utils\Strings::replace()` callback closure parameter type inferred from regex pattern

It also contains these framework-specific rules (can be enabled separately):

* Do not extend Nette\Object, use Nette\SmartObject trait instead
* Rethrow exceptions that are always meant to be rethrown (like `AbortException`)
* Validate regex patterns passed to `Nette\Utils\Strings` methods


## Installation
Expand Down