dotaz na získaní hodnot z config.neon

vlkodlak
Člen | 175
+
0
-

zdravím,
„zápasím“ s tím, že nevidím data z konfiguračního souboru a již motám se v kruhu

config.neon

parameters:
   webLang:            # dostupné jazykové mutace
      - cs
      - en
      - de

   default: cs

a do ladoňky chci jen vypsat vypsat podobu pole a vyzkoušel jsem tyto kombinace

HomepagePresenter.php

declare(strict_types=1);

namespace App\Presenters;

use Nette;
use Nette\Application\UI\Form;

final class HomepagePresenter extends Nette\Application\UI\Presenter
{

   public function renderDefault()
   {
      bdump($this->context);
      bdump($this->context->getParameters());
      bdump($this->context->parameters);
      bdump($this->context->getParameters('webLang'));
      bdump('jen tento radek se ukaze v ladence');
   }
}

jen poslední něco ukáže u všech ostatních nic … je tu tak málo kódu a nevidím chybu :-(

Editoval vlkodlak (6. 12. 2020 1:34)

Marek Znojil
Člen | 90
+
+2
-

Ahoj,

buď můžeš parametry z confingu předat presenteru, který zaregistruješ do služeb:

services:
  # konstruktorem
  - App\Presenters\HomepagePresenter(%webLang%)

  # setterem
  -
    create: App\Presenters\HomepagePresenter
    setup:
      setWebLang(%webLang%)
class HomepagePresenter extends BasePresenter{
    public function __constructor($webLang){}

    public function setWebLang($webLang){}
}

nebo si vytvoříš službu, která je bude předávat napříč aplikací (Méně čisté řešení.):

parameters:
  configuration:
    webLang:
      - cs
      - en
    default: cs
    # ..
services:
  - Configuration(%configuration%)
class Configuration{

    /** @var array */
    protected $configuration;

    public function __construct(array $configuration){
        $this->configuration = $configuration;
    }

    /** @return mixed */
    public function __get(string $name){
        return $this->configuration[$name];
    }

}
class BasePresenter extends Nette\Application\UI\Presenter{

	/** @var Configuration @inject */
	public $configuration;

    protected function beforeRender(): void{
		parent::beforeRender();
		bdump($this->configuration->webLang);
    }

}
vlkodlak
Člen | 175
+
0
-

@MarekZnojil Tak jsem to zkusil, ale při volaní (odkazovaní) na %webLang% (nebo v druhem případě %configuration%) u vytváření sevisy píše - Missing parameter ‚webLang‘ … co tomu může chybět? proč to nevidí?

Kamil Valenta
Člen | 822
+
0
-

Smazal jsi cache?

vlkodlak
Člen | 175
+
0
-

@KamilValenta : ano, jako první krok (mnoho krát jsem na tom pohořel) :-( … jen info: mám nette ve verzi 3.0.7

Marek Znojil
Člen | 90
+
0
-

vlkodlak napsal(a):

@MarekZnojil Tak jsem to zkusil, ale při volaní (odkazovaní) na %webLang% (nebo v druhem případě %configuration%) u vytváření sevisy píše - Missing parameter ‚webLang‘ … co tomu může chybět? proč to nevidí?

Jak máš definované parameters, můžeš poslat ukázku?

vlkodlak
Člen | 175
+
0
-

Marek Znojil napsal(a):

vlkodlak napsal(a):

@MarekZnojil Tak jsem to zkusil, ale při volaní (odkazovaní) na %webLang% (nebo v druhem případě %configuration%) u vytváření sevisy píše - Missing parameter ‚webLang‘ … co tomu může chybět? proč to nevidí?

Jak máš definované parameters, můžeš poslat ukázku?

promiň nerozumim požadavku

parameters:
   webLang:            # dostupne jazykove mutace
      - cs
      - en
      - de
   default: cs

ale na to se asi neptaš

vlkodlak
Člen | 175
+
0
-

při pokusech, náhodou, jsem přišel u jiné starší instalaci nette, při porovnání laděnky vypisovaní obsahu „containeru…“, se mi zda, že se nepředává pole „Parameters“ je to možné? Prosím, jak případně sjednat nápravu u stávající instalace? … nainstalovat novou čistou verzi, nakopírovat projekt tam a doufat, že tam vše bude fungovat?

@MarekZnojil : vyzkoušeno na tom druhem nette a tam %…% zápis funguje. Otázka v čem je možný rozdíl? Čista „instalace“ a instalace se Sandboxem? Jak nastavit i u první varianty předávaní Parameters?

Editoval vlkodlak (7. 12. 2020 16:17)

Šaman
Člen | 2667
+
+3
-

Na řešení takovýchhle problémů je dobré někam nasdílet celý projekt (ideálně jen Sandbox s tou jednou věcí, která nefunguje).
Načítat to normálně má. Někde bude chyba. Může to být věc mezer/tabulátorů v congigu, můžeš to mít co já vím třeba ve špatně includovaném configu, nebo jiná věc. Samotné kusy kódů které posíláš by fungovat měly. (Teda nevím jak $presenter->context->…, to je už dlouho deprecated. Ale rešení od @MarekZnojil by fungovat mělo, chyba bude nejspíš někde mimo ukázaný kód.)

P.S. Ideálně třeba na GitHub, kde si to můžeme proklikat online a nemusíme stahovat nějaký archív a ten rozbalovat. Spousta z nás se na nějakych podobnych blbostech už zasekla a teď když vidíme reálný kód, trkne nás to.

Editoval Šaman (7. 12. 2020 15:44)

vlkodlak
Člen | 175
+
+1
-

Šaman napsal(a):

Na řešení takovýchhle problémů je dobré někam nasdílet celý projekt (ideálně jen Sandbox s tou jednou věcí, která nefunguje).
Načítat to normálně má. Někde bude chyba. Může to být věc mezer/tabulátorů v congigu, můžeš to mít co já vím třeba ve špatně includovaném configu, nebo jiná věc. Samotné kusy kódů které posíláš by fungovat měly. (Teda nevím jak $presenter->context->…, to je už dlouho deprecated. Ale rešení od @MarekZnojil by fungovat mělo, chyba bude nejspíš někde mimo ukázaný kód.)

P.S. Ideálně třeba na GitHub, kde si to můžeme proklikat online a nemusíme stahovat nějaký archív a ten rozbalovat. Spousta z nás se na nějakych podobnych blbostech už zasekla a teď když vidíme reálný kód, trkne nás to.

souhlasím a děkují již jsem se hnul z místa