getComponent(); – správný název komponenty
- exquis
- Člen | 83
Ahoj,
pokouším se vytvořit komponentu z textu, např. mám v DB v textu:
nějaký článek
[module type=IKontaktniFormularComponent id=1]
další text
je asi jasné, že vy se v tu chvíli měla vytvořit komponenta KontaktniFormular,ale hází chybu.
Název souboru s komponentou: KontaktniFormularComponent.php
Název třídy v souboru: KontaktniFormularComponent, interface: IKontaktniFormularComponent
Namespace: namespace Profect\Shopminer\Komponenty;
I když dám v presenteru samotné
$this->getComponent('Profect\Shopminer\Komponenty\IKontaktniFormularComponent');
tak stejně tvrdí, že komponenta neexistuje, napadá někoho proč?
Nette\InvalidArgumentException
Component with name ‚Profect\Shopminer\Komponenty\IKontaktniFormularComponent‘ does not exist.
Editoval exquis (7. 7. 2016 14:48)
- exquis
- Člen | 83
CZechBoY napsal(a):
Ten kod máš v createComponent nebo kde?
Tu komponentu nejdřív musíš vytvořit podle dané továrny a předat parametry – pomocí getComponent se asi nevytvoří pokud tam nemáš někde createComponentXXX
Vytvořená není, v podstatě se snažím o to, aby obyčený text šel rozšířit o komponenty a uživatel si sám mohl vložit např. kontaktní formulář kam bude potřebovat, takže vlastně na začátku nevím jaké komponenty (pokud vůbec nějaké mám vytvořit). Tím pádem nemohu vytvořit createComponentxxx, tohle je celá funkce
private function applyComponents(Nette\Application\UI\Presenter $presenter, $html)
{
preg_match_all("|\[module type=(?<typ>\H+) id=(?<modulId>\d+)\]|", $html, $matches);
if ($matches) {
foreach ($matches["typ"] AS $key => $value) {
if ($value) {
try {
// $html = $presenter->getComponent('Profect\Shopminer\Komponenty\IKontaktniFormularComponent')->render();
} catch (\ReflectionException $ex) {
}
}
}
}
return $html;
}
- Michal Hlávka
- Člen | 190
Zkus
$this->context->getByType('Profect\Shopminer\Komponenty\IKontaktniFormularComponent');
Případně to může být aji tím, že ji nemáš zaregistrovanou
v services.neon
Editoval emptywall (7. 7. 2016 15:15)
- ViPEr*CZ*
- Člen | 818
Pak si budete muset udělat nějakou vlastní funkcionalitu, která to Vaše
„makro“ vezme (najde ho v té šabloně), vytvoří podle textu v tom
makru nějakou instanci nějaké třídy dědící UI\Control a pak takovou
instanci přidat na správném místě do kontejneru přes addComponent pod
správným jménem.
Navíc pak budete muset v té šabloně to Vaše makro nahradit vykreslením
oné komponenty.
Celé mě napadá, že by mělo jít udělat formou vlastního nadefinovaného
makra: https://latte.nette.org/cs/#….
Editoval ViPEr*CZ* (7. 7. 2016 15:47)