DI Helpers ‚Missing parameter xxx‘

Barbarossa
Člen | 74
+
0
-

Ahoj,

máme v práci problém s DI 3.0.4 pasováním cookies parametrů, končící chybou Missing parameter '22bb4d64b0-8729-4b23-8dfa-9868f2c767ca' z src/DI/Helpers.php:76.

Chyba vyskočí vždy po smazaní cache a to UID je přiřazené cookies: ajs_anonymous_id – s tím, že tou dobou začíná a končí s %22 (dělá to JIRA web plugin – ukládají si to hold takhle…)
rozparsuje se to pak tedy špatně kde proměná $var je eu-cookies=1; __stripe_mid=xxx-xxx-xxx-xxx-xxx; notification=hide; PHPSESSID=xxx; nette-samesite=1; intlTelInput-country=CZ; ajs_group_id=null; ajs_anonymous_id=%22bb4d64b0-8729-4b23-8dfa-9868f2c767ca%22 a $parts array viz screen. Díky za každou pomoc.

Chyba se nám objevila, až po upgradu na Nette 3, předtím se ty cookies asi rozparzovali správně…

(duplicita se Slack na pehapeckarich, ale ať je to tu i pro ostatní a historii).

Editoval Barbarossa (19. 5. 2020 16:14)

David Grudl
Nette Core | 8129
+
0
-

Vůbec jsem nepochopil ani ťuk…

David Matějka
Moderator | 6445
+
+1
-

jestli to chápu, tak se někde jako parametr používá ta cookie hodnota a nette se ho snaží rekurzivně expandovat.

můžeš, prosím, poslat html tracy?

Barbarossa
Člen | 74
+
0
-

@DavidGrudl @DavidMatějka Nějaký progress prosím?

David Grudl
Nette Core | 8129
+
0
-

A jak tam ty parametry vkládáš? Pošli ideálně nějaký zjednodušený kód.

Barbarossa
Člen | 74
+
0
-

@DavidGrudl ty cookies si tam nastavují webové widgety přes JS (Stripe, Jira, PhoneInput…), ostatní nastavuje Nette.

V Bootsrap třídě používáme \Contributte\Bootstrap\ExtraConfigurator a onCompile callback:

$envs = $configurator->getAllEnvironmentParameters();
$compiler->addConfig(['parameters' => ['env' => $envs]]); //viz tracy envs

v neon configu jsou tyto extenze:

extensions:
	tenant: App\DI\Tenant\TenantSetupExtension # tohle by teoreticky mohlo zlobit, pokud se ten expand nedělá ještě předtím...
	api: Apitte\Core\DI\ApiExtension
	cloudFunctions: App\DI\CloudFunctions\CloudFunctionsExtension
	cdn: App\DI\CdnManager\CdnManagerExtension
	console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
	dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
	dependentSelectBox: NasExt\Forms\DependentExtension
	featureSwitch: App\DI\FeatureSwitchExtension
	middlewares: Contributte\Middlewares\DI\MiddlewaresExtension
	migrations: Nextras\Migrations\Bridges\NetteDI\MigrationsExtension
	multiplier: Contributte\FormMultiplier\DI\MultiplierExtension
	orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
	redis: Contributte\Redis\DI\RedisExtension
	resource: Contributte\DI\Extension\ResourceExtension
	translation: Kdyby\Translation\DI\TranslationExtension
	wizard: Contributte\FormWizard\DI\WizardExtension

Jinak už moc nevím co dál zmínit… případně ti pak víc naposílám třeba soukromě do slacku nebo někam… Díky za pomoc.

David Grudl
Nette Core | 8129
+
0
-

V tom co jde do parameters je potřeba nahradit % za %%. Můžeš místo toho použít $configurator->addDynamicParameters(['env' => $envs]). Ale v tomhle by se nemělo Nette 2 od 3 nijak lišit. Netuším teda ani, co dělá getAllEnvironmentParameters() a jak se pak proměná env používá.

Barbarossa
Člen | 74
+
0
-

Díky za pomoc. Máš pravdu, předtím jsme tam používali ten DynamicParameters, teď jsem ten getAllEnvironmentParameters upravil alespoň tak ať nebere HTTP_ a je po problémech (nyní nám to s addDynamic nefunguje, ale zapracujem na tom)

David Grudl
Nette Core | 8129
+
+1
-

Pokud do toho vstupují hlavičky apod, tak na to rozhodně použij addDynamicParameters(), protože addParameters() by způsobil, že se pro každého uživatele zkompiluje nový DI kontejner a sežere ti to výkon stroje a místo na disku.

MikyWoW
Člen | 9
+
0
-

Mám podobný problém s DI v3.0.6
Děje se mi to jen v produkci na hostingu a nevím čím to může být. Verze PHP je stejná 7.4.8

Pokud je v URL například diakritika:
URL v prohlížeči: https://sub.example.com/result?search=ř
URL encode je pak: https://sub.example.com/result?search=%C5%99

A vyhodí chybu:
Nette\InvalidArgumentException: Missing parameter ‚C5‘. in /vendor/nette/di/src/DI/Helpers.php:75

Edit:
Našel jsem problém. Hosting cpe z nějakého důvodu do enviromentálních proměnných hromadu kravin včetně url adresy…

Já je používám v konfiguraci a tím se to rozbije.

$configurator->addParameters(['env' => $_ENV]);

Editoval MikyWoW (9. 12. 2020 18:04)