Compile Error SmartObject

d@rkWolf
Člen | 165
+
0
-

Zdravím, spustil jsem Composer Update, abych mohl vyzkoušet novou verzi Nette/Application a výsledek je toto:

Compile Error
Declaration of Nette\SmartObject::__call(string $name, array $args) must be compatible with Nette\Forms\Controls\BaseControl::__call(string $name, array $args): mixed

File: …vendor\nette\utils\src\SmartObject.php:28

22:    trait SmartObject
23:    {
24:        /**
25:         * @return mixed
26:         * @throws MemberAccessException
27:         */
28:        public function __call(string $name, array $args)

Netušíte, co to může způsobovat? @DavidGrudl ? Je chyba ve Forms nebo Utils? Tracy neodkazuje nikam dál, Composer nehlásil žádný problém v závislostech. Teď mám vše „up to date“ a přitom nic nefunguje :-( . Nette Utils jsou 4.0.4 a Forms 3.2.2. Trochu se nechytám, v čom je problém? PHP mám 8.2.

Composer update updatuje toto, před updatem systém funguje:

contributte/forms-bootstrap v0.6.1 v0.8 Nette extension for Bootstrap forms
nette/application v3.1.14 v3.2.3 🏆 Nette Application: a full-stack component-based MVC kernel for PHP that helps you write powerf…
nette/forms v3.1.12 v3.2.2 📝 Nette Forms: generating, validating and processing secure forms in PHP. Handy API, fully custo…

Zkusil jsem to i bez forms-bootstrap a výsledek je stejný, takže ty to snad způsobovat nebudou.

Editoval d@rkWolf (26. 4. 19:40)

Marek Bartoš
Nette Blogger | 1178
+
0
-

Tohle se stane v okamžiku, když přetížíš __call definovaný v BaseControl pomocí SmartObject, ne když použiješ SmartObject a následně přetížíš __call
Takže nějaká třída dědící od BaseControl má zbytečně use SmartObject
https://3v4l.org/35EZW vs https://3v4l.org/uAcba

Bohužel tohle je výjimečný případ, kdy PHP ukazuje jako zdroj traitu namísto třídy ve které je použitá, takže budeš muset hledat

Editoval Marek Bartoš (26. 4. 20:54)

d@rkWolf
Člen | 165
+
0
-

@MarekBartoš Hmm, průšvih je, že jsem SmartObject zapoznámkoval všude ve svém kódu a chyba je tam pořád :-(

Problém vyřeší dopsání „mixed“ návratového typu do traity(nerad edituju Vendor…), narozdíl od všeho ostatního, co nemá žádný efekt:

public function __call(string $name, array $args): mixed

Editoval d@rkWolf (29. 4. 17:19)