geniv / nette-cookie-bar – problém s rozchozením

Webster.K
Člen | 192
+
0
-

Zdravím všechny. Je to už nějakou dobu, co jsem s nette pracoval (naposled tuším verzi 2.2). Nyní jsem se ale rozhodl se k tomu vrátit. Nette nainstaloval a spustil přes composer a přes composer přidal i geniv/nette-cookie-bar. Do teď vše v pořádku (v kodu zatim vubec nic nemam, jako první ještě před designem a vším jsem začal řešit cookie lištu – věc co nejvíc nesnáším ale všude musí být). Pak jsem pokračoval dle návodu, tedy do config.neon hodil do služeb. do @layout před </body> hodil {control cookieBar} a do HomepagePresenteru dal před renderDefault():

protected function createComponentCookieBar(ICookieBar $cookieBar): ICookieBar
{
    //$cookieBar->setTemplatePath(__DIR__ . '/templates/cookieBar.latte');
    $cookieBar->setCookieName('nette-web-cookie-bar');
    //$cookieBar->setCookieExpire('+10 years');
    return clone $cookieBar;
}

Tím končím chybou: TypeError

App\Presenters\HomepagePresenter::createComponentCookieBar(): Argument #1 ($cookieBar) must be of type App\Presenters\ICookieBar, string given, called in /Users/Webster/Websites/nette_sandbox/po_letech_v_nette/vendor/nette/component-model/src/ComponentModel/Container.php on line 163

Bohužel je to roky co jsem kód viděl naposledy, takže věřím že je to nějaká drobnost, kterou si už po letech nepamatuji, bohužel se mi nedaří si vzpomenout a ani vygooglit, co s tím mám dělat, tak se obracím na Vás :)

Pepino
Člen | 249
+
0
-

@WebsterK IMHO, tahle cookie lišta je dneska k ničemu. Před X lety možná účel splnila ale dnes určitě ne.

Btw: Tohle by mohlo fungovat.

private $cookieBar;

public function __construct(ICookieBar $cookieBar) {
	$this->cookieBar = $cookieBar;
}

protected function createComponentCookieBar(): ICookieBar
{
	$cookieBar = $this->cookieBar;
    //$cookieBar->setTemplatePath(__DIR__ . '/templates/cookieBar.latte');
    $cookieBar->setCookieName('nette-web-cookie-bar');
    //$cookieBar->setCookieExpire('+10 years');
    return clone $cookieBar;
}
Webster.K
Člen | 192
+
0
-

Tak jsem homepagePresenter predelal na:

<?php

declare(strict_types=1);

namespace App\Presenters;

final class HomepagePresenter extends BasePresenter {

    private $cookieBar;

    public function __construct(ICookieBar $cookieBar) {
        $this->cookieBar = $cookieBar;
    }

    protected function createComponentCookieBar(): ICookieBar {
        $cookieBar = $this->cookieBar;
        //$cookieBar->setTemplatePath(__DIR__ . '/templates/cookieBar.latte');
        $cookieBar->setCookieName('nette-web-cookie-bar');
        //$cookieBar->setCookieExpire('+10 years');
        return clone $cookieBar;
    }

    public function renderDefault() {

    }

}

a končím v chybě Service ‚application.2‘ (type of App\Presenters\HomepagePresenter): Class ‚App\Presenters\ICookieBar‘ required by $cookieBar in HomepagePresenter::__construct() not found. Check the parameter type and ‚use‘ statements.

Proč je v současné době tento cookie bar k ničemu? Určitě bych ho upravil. Ale co musí teda dneska splňovat? Bral jsem to vždycky jen jako otravnou část co se na webu musí odkliknout…

Editoval Webster.K (3. 4. 2023 15:16)

nightfish
Člen | 474
+
0
-

Webster.K napsal(a):
a končím v chybě Service ‚application.2‘ (type of App\Presenters\HomepagePresenter): Class ‚App\Presenters\ICookieBar‘ required by $cookieBar in HomepagePresenter::__construct() not found. Check the parameter type and ‚use‘ statements.

Rozhraní ICookieBar není v App\Presenters, dokonce není v žádném namespace, takže buď nad class HomepagePresenter přidej use ICookieBar; nebo konstruktor uprav na __construct(\ICookieBar $cookieBar) {.

nightfish
Člen | 474
+
0
-

@WebsterK Co se týká dotazu „proč je k ničemu“: v legislativě, která řeší cookies, došlo v loňském roce k výrazné změně. V balíčku geniv/nette-cookie-bar došlo k poslední změně před 5 lety, takže řešení, které balíček implementuje, již je v rozporu se současnými požadavky.

Webster.K
Člen | 192
+
0
-

Ok, povedlo se to rozchodit, nicméně ten kod obsahuje ještě spousta dalších chyb a starších už nepodporovanych veci v novem nette. Asi lepší se na to vykašlat :/ Předpokládám, že někde není dostupný nějaký cookie bar, který je aktualizovaný a splňuje vše nove? Je otázka, pokud mám na webu jen Google Analytics momentálně aktualizované na G4, je potřeba to mít? Nic jiného tam momentálně není.

Editoval Webster.K (3. 4. 2023 20:03)