Compile Error SmartObject
- d@rkWolf
- Člen | 167
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 | 1274
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 | 167
@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)