Contributte translation odesle hlavicky?!

Newer
Člen | 47
+
0
-

Ahoj, mám problém, na localu vse ok, jakmile deploynu na server tak mám následující chybu… tzn nelze se přihlásit, nejde odeslat mail z webu, nejde nic. Zkoušel jsem na localu natavit ini_set(‚display_errors‘, ‚1‘); error_reporting(E_ALL); abych dostal stejnou chybu i tam ale nelze..... Nějaká rada?
Translations jsem si nakonfiguroval podle dokumentace ofc.

PHP 7.4 (má to svůj důvod)
composer.json přikládám níže.

`ErrorException: The advice of session locale resolver is required but the session has not been started and headers had been already sent. Either start your sessions earlier or disable the SessionResolver. in /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/contributte/translation/src/LocalesResolvers/Session.php:41
Stack trace:
#0 [internal function]: Tracy\Bar->Tracy\{closure}(512, ‚The advice of s…‘, ‚/data/web/virtu…‘, 41, Array)
#1 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/contributte/translation/src/LocalesResolvers/Session.php(41): trigger_error(‚The advice of s…‘, 512)
#2 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/contributte/translation/src/Tracy/Panel.php(100): Contributte\Translation\LocalesResolvers\Session->resolve(Object(Contributte\Translation\Translator))
#3 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/tracy/tracy/src/Tracy/Bar/Bar.php(145): Contributte\Translation\Tracy\Panel->getPanel()
#4 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/tracy/tracy/src/Tracy/Bar/Bar.php(117): Tracy\Bar->renderPanels('')
#5 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/tracy/tracy/src/Tracy/Bar/Bar.php(91): Tracy\Bar->renderPartial(‚main‘)
#6 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/tracy/tracy/src/Tracy/Debugger/DevelopmentStrategy.php(139): Tracy\Bar->render(Object(Tracy\DeferredContent))
#7 /data/web/virtuals/212676/virtual/www/domains/rejnok.fscreation.cz/vendor/tracy/tracy/src/Tracy/Debugger/Debugger.php(304): Tracy\DevelopmentStrategy->renderBar()
#8 [internal function]: Tracy\Debugger::shutdownHandler()
#9 {main}`

`{
„name“: „nette/web-project“,
„description“: „Nette: Standard Web Project“,
„keywords“: [„nette“],
„type“: „project“,
„license“: [„MIT“, „BSD-3-Clause“, „GPL-2.0“, „GPL-3.0“],
„require“: {
„php“: „>= 7.2“,
„nette/application“: „^3.1“,
„nette/bootstrap“: „^3.1“,
„nette/caching“: „^3.1“,
„nette/database“: „^3.1“,
„nette/di“: „^3.0“,
„nette/finder“: „^2.5“,
„nette/forms“: „^3.1“,
„nette/http“: „^3.1“,
„nette/mail“: „^3.1“,
„nette/robot-loader“: „^3.3“,
„nette/security“: „^3.1“,
„nette/utils“: „^3.2“,
„latte/latte“: „^2.11 || ^3.0“,
„tracy/tracy“: „^2.8“,
„contributte/translation“: „^0.8.3“
},
„require-dev“: {
„nette/tester“: „^2.3“,
„symfony/thanks“: „^1“
},
„autoload“: {
„psr-4“: {
„App\\“: „app“
}
},
„minimum-stability“: „stable“,
„config“: {
„allow-plugins“: {
„symfony/thanks“: true
}
}
}
`

Marek Bartoš
Nette Blogger | 1177
+
+1
-

Hlavičky automaticky odesílá server, pokud je už odeslaný nějaký výstup.
Nejprve si tedy zjisti, zda se nějaký výstup neodesílá dřív než by měl – v boostrapu si aktivuješ třídu Tracy\OutputDebugger, ta ti vypíše kde je první výstup.
Pokud se ti odesílá výstup ve správný okamžik (při renderu presenteru), tak musíš zajistit, že se session nastartuje včas. Nejspíš by mělo stačit nastavit session > autoStart: smart – pokud session už existuje, tak ji to spustí při startu appky.
Pokud nepomůže, budeš si muset start session nejspíš vynutit. Třeba v base presenteru, přes Session service.

A používej prosím zvýrazňování kódu, nedá se to číst.

Newer
Člen | 47
+
0
-

Ahoj, diky za pomoc a za kod se omlouvam .....

zapl jsem si:

session:
	debugger: true

kdyz přidám

autoStart: true

tak chyba z tracy zmizí…
Ale sessions které vytvoří jsou prázdné,
na ftp do sessions se uloží session… a obsah je

__NF|a:3:{s:4:"Time";i:1687802326;s:4:"DATA";a:2:{s:48:"Contributte\Translation\LocalesResolvers\Session";N;s:23:"Nette.Http.UserStorage/";N;}s:4:"META";a:0:{}}

přijde mi že contributte/translation extenze tam dělá nějakou neplechu, ale nejsem schopnout debugnout kde…

Editoval Newer (26. 6. 2023 20:05)

Marek Bartoš
Nette Blogger | 1177
+
0
-

@Newer https://github.com/…/Session.php#L39
Zkus do téhle metody přidat na začátek:

if(!$this->session->exists()) {
	return null;
}

A potom smaž cookies a zkus to znova, bez autoStart: smart. Mělo by to zajistit, že se session nevytvoří, pokud neexistuje.
A dej vědět, zda to v tvém případě zafungovalo.

Newer
Člen | 47
+
0
-

Nepomohlo, session mi to nastartuje… ale nic neobsahuji, kdyz se pokusim napri prihlasit tak to jen refreshne stranku a ani neodesle prihlasovaci udaje jako sql dotaz na DB …

Newer
Člen | 47
+
0
-

config:


session:
	expiration: 14 days
	debugger: true

extensions:
	translation: Contributte\Translation\DI\TranslationExtension

translation:
	locales:
		whitelist: [cs]
		default: cs
		fallback: [cs_CZ]
	dirs:
		- %appDir%/lang

BasePresenter



    /** @var Nette\Localization\ITranslator @inject */
    public $translator;

    /** @persistent */
    public $locale;

.
.
.
.
    protected function startup()
    {
        parent::startup();
        if (!$this->getUser()->isAllowed($this->getName(), $this->getAction())) {
            if ($this->user->logoutReason === Nette\Security\IUserStorage::INACTIVITY) {
                $this->flashMessage($this->translator->translate('flashMessage.logoutInactivity'), self::MSG_INFO);
            }
            $this->flashMessage($this->translator->translate('flashMessage.notLoggedIn'), self::MSG_ERROR);
            $this->redirect(':Core:Sign:signIn', ['backlink' => $this->storeRequest()]);
        }
    }

.
.
.
.
.
 public function beforeRender()
    {
        parent::beforeRender();
        $this->template->menuHeader = $this->articleManager->getHeader($this->presenter->getAction());
        $this->template->locale = 'cs';

        $this->template->menu = $this->articleManager->getUrls();
        $this->template->menuCat = $this->articleManager->getMenuCategory();
}
....
Marek Bartoš
Nette Blogger | 1177
+
0
-

Jestliže session neexistuje, tak ta metoda s mou změnou nic neudělá. Nespustí session (ani s autostart), ani nevypíše chybu. Takže už musí existovat z předchozích requestů a jen se spustí nebo ji v aktuálním requestu vytváří a spouští něco jiného.

Newer
Člen | 47
+
0
-

Jak mám najít kde? kde jí něco spustí a kde to odešle hlavičky?…

Newer
Člen | 47
+
0
-

hmm, stacilo prepnout na PHP 8… Přitom všude podle dokumentace jsem měl dostatečnou verzi PHP a na localu se stejnou verzí PHP to fungovalo, no nevadí..

I tak děkuji