Neufnkcne templateType, ako overit funkcnost?

MKI-Miro
Člen | 261
+
0
-

Ahojte

V presenteru mam:

$product= $this->productRepository->findAll()->get($id);

$productViewModel = new ViewModels\ProductViewModel();
$productViewModel->id = $product->id;
$productViewModel->name = $product->name;

$this->setView("productDetail", $productViewModel);

ViewModel:

namespace App\Presenters\ViewModels;

class ProductViewModel
{
    public int $id;
    public string $name;
}

V latte:

{templateType App\Presenters\ViewModels\ProductViewModel}

<h1 class="product-title">{$name}</h1>

Zahlasi mi ze nepozna premenu $name

Robim nieco zle?

Dakujem

Edit: nefunguje to ani takto

$this->template->render(__DIR__ . '/templates/product/product.latte', (array)$productViewModel);

Edit2: ak by vedel niekto pomoct som ochotny aj zaplatit

Podla tohto clanku https://blog.nette.org/…-type-system
by mala trieda dedit od extends \Nette\Bridges\ApplicationLatte\Template
ak to ale pridam tak dostanem error

Too few arguments to function Nette\Bridges\ApplicationLatte\Template::__construct(), 0 passed in ProductPresenter.php on line 102 and exactly 1 expected

Editoval MKI-Miro (9. 6. 2020 11:09)

MKI-Miro
Člen | 261
+
-1
-

som ochotny aj zaplatit za vyriesenie problemu

MajklNajt
Člen | 470
+
0
-

@MKI-Miro čo očakávaš, že spraví $this->setView("productDetail", $productViewModel);? tá metóda má iba jeden parameter a tým je názov view (teda šablóny), pokiaľ chceš do šablóny predať nejaké dáta, použi

$this->template->productViewModel = $productViewModel;

a v šablóne potom používaj

<h1 class="product-title">{$productViewModel->name}</h1>
MKI-Miro
Člen | 261
+
0
-

to ale nie je asi spravny pouzitia pre {templateType
alebo ano?

MajklNajt
Člen | 470
+
-1
-

templateType sa používa, aby phpStorm vedel našepkávať, ty si domiešal úplne jablká s hruškami

Marek Bartoš
Nette Blogger | 1146
+
0
-

Takto vytvoříš a vyrenderuješ custom template, z konkrétní třídy

$template = $this->createTemplate(TemplateClass::class);
assert($template instanceof TemplateClass);
...
$template->render();

Automaticky (pro $this->template) se vytváří Foo\Bar\ExampleTemplate pro Foo\Bar\ExamplePresenter, pokud daná třída existuje. Jinak se použije DefaultTemplate.

Do $template->render() nepředáváš žádný view model, $template je ten view model.

A potřebuješ "nette/application": "3.0.x-dev", není to zatím ve stable verzi. V té jsou zatím jen makra templateType a varType a ta sama o sobě slouží čistě pro napovídání

https://github.com/…/Control.php#…

Editoval Mabar (9. 6. 2020 14:57)

MKI-Miro
Člen | 261
+
-1
-

MajklNajt napsal(a):

templateType sa používa, aby phpStorm vedel našepkávať, ty si domiešal úplne jablká s hruškami

isiel som podla tohto

https://blog.nette.org/…ypovy-system

cize rad by som mal vedel v sablone akeho typu su premenne

MKI-Miro
Člen | 261
+
-1
-

Mabar napsal(a):

Takto vytvoříš a vyrenderuješ custom template, z konkrétní třídy

$template = $this->createTemplate(TemplateClass::class);
assert($template instanceof TemplateClass);
...
$template->render();

Automaticky (pro $this->template) se vytváří Foo\Bar\ExampleTemplate pro Foo\Bar\ExamplePresenter, pokud daná třída existuje. Jinak se použije DefaultTemplate.

Do $template->render() nepředáváš žádný view model, $template je ten view model.

A potřebuješ "nette/application": "3.0.x-dev", není to zatím ve stable verzi. V té jsou zatím jen makra templateType a varType a ta sama o sobě slouží čistě pro napovídání

https://github.com/…/Control.php#…

mam nette/application (v3.0.5):

skusam to teda takto:

$latte = $this->template->getLatte();

$productTemplate = new ProductTemplate($latte);
$productTemplate->id = $product->id;
$productTemplate->name = $product->name;

$template = $this->createTemplate($productTemplate);

$template->render();

Pricom ProductTemplate vyzera takto

namespace App\Presenters;

class ProductTemplate extends \Nette\Bridges\ApplicationLatte\Template
{
    public int $id;
...

dostavam

rgument 1 passed to Latte\Engine::render() must be of the type string, null given, called in C:\wamp64\www\mania\vendor\nette\application\src\Bridges\ApplicationLatte\Template.php on line 50

Editoval MKI-Miro (9. 6. 2020 16:05)

David Grudl
Nette Core | 8082
+
+1
-

Hele netuším, čeho se přesně snažíš dosáhnout. Pokud ti jde o napovídání v PhpStormu, tak stačí vytvořit třídu ProductViewModel, přidat {templateType} do šablony jak to máš v prvním příspěvku, a víc nic není potřeba dělat.

MKI-Miro
Člen | 261
+
-2
-

David Grudl napsal(a):

Hele netuším, čeho se přesně snažíš dosáhnout. Pokud ti jde o napovídání v PhpStormu, tak stačí vytvořit třídu ProductViewModel, přidat {templateType} do šablony jak to máš v prvním příspěvku, a víc nic není potřeba dělat.

snazim sa aby som v sablone bolo jasne akeho typu premenna je

ale nijako sa mi nedari to aby potom v sablone dokazal rozpoznat napr premenu {$name} – zahlasi ze ju nepozna.

Dost som aj zmateny z tej dokumentacie k tomu – pride mi dost nejasna

Marek Bartoš
Nette Blogger | 1146
+
0
-

Zajímalo by mě, jak jsi z návodu, ve kterém do createTemplate() předávám název třídy došel k tomu, že tam máš dávat nějaký objekt. createTemplate() ten objekt vytvoří za tebe, nemáš ho vytvářet sám. A potřebuješ dev verzi nette/application, takže 3.0.5 ti moc nepomůže

David Grudl
Nette Core | 8082
+
0
-

MKI-Miro napsal(a):

snazim sa aby som v sablone bolo jasne akeho typu premenna je

Jak říkám, stačí vytvořit třídu a použít {templateType}. Dělal jsi to dobře. Pokud se PhpStorm zváří, že proměnnou nezná, je to možná chyba v pluginu. Máš poslední verzi?

Dost som aj zmateny z tej dokumentacie k tomu – pride mi dost nejasna

A kde jsi přišel na ty věci s createTemplate a setView, co přece nikde v dokumentaci není…

MKI-Miro
Člen | 261
+
0
-

David Grudl napsal(a):

MKI-Miro napsal(a):

snazim sa aby som v sablone bolo jasne akeho typu premenna je

Jak říkám, stačí vytvořit třídu a použít {templateType}. Dělal jsi to dobře. Pokud se PhpStorm zváří, že proměnnou nezná, je to možná chyba v pluginu. Máš poslední verzi?

ono error zahlsi samotny nette je nepozna (nie plugin)

>

Dost som aj zmateny z tej dokumentacie k tomu – pride mi dost nejasna

A kde jsi přišel na ty věci s createTemplate a setView, co přece nikde v dokumentaci není…

to sa ospraveldnujem skusal som co sa dalo → dokumentaci celkovoo aj pre latte je fajn problem je ze pre smotne latte to je pisane tak univerzalne (nie je to pisane priamo pre nette – neeviem ci to vysvetlujem spravne)