Fatal error: Declaration of Helpers::length($var) must be compatible with Filters::length($val): int

Čamo
Člen | 786
+
0
-

Zdravím,
dnes som po update vendoru narazil na takýto error: Fatal error: Declaration of Nette\Templating\Helpers::length($var) must be compatible with Latte\Runtime\Filters::length($val): int in /var/www/branches/53-bilancia-roka-2018/vendor/nette/deprecated/src/Templating/Helpers.php on line 18
Deklarácia v parent class Filters vyzerá takto:

	/**
	 * Returns length of string or iterable.
	 * @param  array|\Countable|\Traversable|string  $val
	 */
	public static function length($val): int
	{
		if (is_array($val) || $val instanceof \Countable) {
			return count($val);
		} elseif ($val instanceof \Traversable) {
			return iterator_count($val);
		} else {
			return self::strLength($val);
		}
	}

a deklarácia v child class Helpers

	/**
	 * Returns array of string length.
	 * @param  mixed
	 * @return int
	 */
	public static function length($var)
	{
		return is_string($var) ? Strings::length($var) : count($var);
	}

To vyzerá ako bug.

Michal Hlávka
Člen | 190
+
0
-

Musis u sve tridy uvest navratovy typ, stejne tak jak ve tride rodice.

David Matějka
Moderator | 6445
+
0
-

doporucuju zbavit se zavislosti na nette/deprecated

Čamo
Člen | 786
+
0
-

@DavidMatějka A nemalo by sa to fixnuť? Ono to totiž padne pri načítavaní. Ja tu triedu vôbec nepotrebujem.

Editoval Čamo (25. 2. 2019 15:21)

David Matějka
Moderator | 6445
+
0
-

teoreticky je to fixnuty v nove verzi nette/deprecated. ale nez aktualizovat, tak tu zavislost odeber.

Čamo
Člen | 786
+
0
-

@DavidMatějka Je to teoreticky fixnuté? :D
V composery mám „nette/nette“: „~2.4.0“ to by muselo vyjsť Nette 2.5

Editoval Čamo (26. 2. 2019 9:03)

David Matějka
Moderator | 6445
+
0
-

Ano, vyšlo nette/deprecated 3.0, které už zmiňovanou třídu neobsahuje. také vyšlo latte 2.5, které je právě nekompatibilní s tvým nette/deprecated ve verzi 2.4. více o vydání nových verzí: https://forum.nette.org/…ktualizovano

takže po třetí a naposled: zbav se závislosti na nette/deprecated. meta balíček není doporučeno používat, viz composer.json ve web-project

Čamo
Člen | 786
+
0
-

Takže znova a naposledy. Zápis „nette/nette“: „~2.4.0“ sa neodporúča (odkedy?) čo vlastne znamená že si mám všetky závislosti pre Nette ťahať ručne a zisťovať či sú navzájom kompatibilné? Nesmeruje to dúfam k require_once?
@DavidMatějka

PS: Neviem čo je meta balíček. Čo tak písať vety aby ich chápal každý? To sa určite pri propagácii Nette zíde.

Editoval Čamo (26. 2. 2019 10:20)

CZechBoY
Člen | 3608
+
0
-

@Čamo nette/nette se nepoužívá už tak od 2.2 kdy se Nette rozdělilo na několik balíčků.
require_once použiješ v bootstrap.php, nebo jsem nepochopil co tím myslíš

MajklNajt
Člen | 471
+
0
-

@Čamo ak by si sledoval vývoj, zistil by si, že Nette už dávno nie je jeden balíček ale je rozdelený na viac balíčkov, aby ich bolo možné používať aj jednotlivo bez potreby ťahať zbytočné závislosti

Čamo
Člen | 786
+
0
-

@MajklNajt @CZechBoY To ja predsa viem. To ale neznamená že neexistujú staršie projekty ktoré sú založené inak. No a nie som si istý ale viete že ak sa ťahajú balížky osobitne tak treba ručne vyriešiť nekompatibilitu medzi nimi? Čo mi príde ako nebezpečné… Alebo sa mýlim?

Editoval Čamo (26. 2. 2019 13:16)

MajklNajt
Člen | 471
+
0
-

@Čamo ak máš starší projekt a chceš ho udržiavať na aktuálnom Nette, prispôsob sa vývoju a updatni závislosti tak, ako ti radí @DavidMatějka, refaktoruj čo je potrebné, alebo zostaň na verzií, kde ti to funguje, čo je na tom nepochopiteľné?

Čamo
Člen | 786
+
0
-

@MajklNajt Ja chápem ale vy neodpovedáte na otázku – ak sa ťahajú balížky osobitne tak treba ručne vyriešiť nekompatibilitu medzi nimi.

Editoval Čamo (26. 2. 2019 17:02)

MajklNajt
Člen | 471
+
0
-

@Čamo keď sa zbavíš závislosti na nette/deprecated, zbavíš sa nekompatibility :) a nemusíš riešiť ručne, rieši to za teba napr. nette/web-project, ktorý má vždy composer.json s kompatiblinými balíčkami – viď poslednú otagovanú verziu https://github.com/…omposer.json

David Grudl
Nette Core | 8136
+
+4
-

@Čamo dává naprosto validní bugreport, že instalace nette/nette nefunguje, je přece jedno, že dnes raději používáte něco jiného.

Vydal jsem nette/nette 2.5, které už netahá balíčky nette/deprecated & nette/reflection, a mělo by tedy fungovat i pod PHP >= 7.1