V PHP 8.0 nefunguje atribut #[Inject]
- m.brecher
- Generous Backer | 871
Ahoj, narazil jsem na tento problém:
Anotace @inject funguje:
abstract class ContentPresenter extends BasePresenter
{
/** @inject */ public App\Model\NavigationModel $navModel; // funguje
Metoda inject*() funguje také:
abstract class ContentPresenter extends BasePresenter
{
public App\Model\NavigationModel $navModel;
public function injectContent(App\Model\NavigationModel $navModel,) // funguje
{
$this->navModel = $navModel;
}
Atribut #[Inject] nefunguje, ale měl by, používám PHP 8.0 a poslední verzi Nette
abstract class ContentPresenter extends BasePresenter
{
#[Inject] public App\Model\NavigationModel $navModel; // nefunguje PHP 8.0, poslední verze Nette
Nette hlásí chybu v metodě beforeRender(): Typed property App\Presenters\ContentPresenter::$navModel must not be accessed before initialization
Nemá někdo nápad, kde by mohla být chyba?
- Marek Bartoš
- Nette Blogger | 1274
Máš tam use statement? Atributy stejně jako třídy patří pod nějaký namespace.
- m.brecher
- Generous Backer | 871
@MarekBartoš – dík, to bude ono, nikde jsem atribut nedeklaroval, jenom použil takto:
declare(strict_types=1);
namespace App\Presenters;
use App;
abstract class ContentPresenter extends BasePresenter
{
#[Inject] public App\Model\NavigationModel $navModel; // todo: zjistit proč toto mě nefunguje a mělo by !!
....
Půjdu si atributy nastudovat do PHP dokumentace ;)
- nightfish
- Člen | 518
@m.brecher Potřebuješ
use Nette\DI\Attributes\Inject;
– viz https://doc.nette.org/…dependencies#…