DI Helpers ‚Missing parameter xxx‘
- Barbarossa
- Člen | 74
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 Matějka
- Moderator | 6445
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?
- David Grudl
- Nette Core | 8227
A jak tam ty parametry vkládáš? Pošli ideálně nějaký zjednodušený kód.
- Barbarossa
- Člen | 74
@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 | 8227
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
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 | 8227
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
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)