Link na signal subkomponenty

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
petas
Člen | 2
+
0
-

Zdravim,

prosim o radu s chybou „The signal receiver component ‚pageContent1-file3‘ is not found.“, protoze nejsem schopny po celkem dukladnem precteni fora najit reseni.

Pokousim se o jednoduche CMS. Navrh je asi takovy: 1 presenter s componentou pageContent, ktera obsahuje dynamicky pocet subkomponent paragraph, image, file, atd. Jednotlive komponenty jsou vytvareny pres tovarnicky (pageContent v presenteru a subkomponenty v komponente pageContent).

V sablone subkomponenty file potrebuji vytvorit link, na metodu downloadFile.
Vytvarim ho takto v render subkomponenty file:

$template->downLink = $this->link('downloadFile', $this->data['nazev']);

Vytvori mi toto:
?pageContent1-file3-nazev=client-instalace.zip&do=pageContent1-file3-downloadFile

Kliknutim na link dostanu vyse uvedenou chybu BadSignalException #403.

Nejsem si jisty, jestli soucasti linku nema byt i presenter. tzn ?presenter-komponenta-subkomponenta…
Vypada to podle prispevku tady na foru na neprovazani prezenteru, komponent a subkomponent, ale kdyz
dumpnu components presenteru, tak vypis vypada OK:

Nette\ComponentModel\RecursiveComponentIterator #b28b
pageContent1 => PageContentControl #cd11
configf protected => "/var/www-netteprojects/cis-obsah/APC/stranka.json" (56)
actualPath protected => "APAC" (4)
pageContent protected => array (5)
nadpis => "APAC" (4)
poznamka => "Úvodní stránka popisu hotovosti IS APC" (42)
datumPublikace => "1.8.2014" (8)
datumPlatnostiDo => "31.12.2999" (10)
obsah => array (4) [ ... ]
ParagraphControlFactory private => NULL
FileControlFactory private => NULL
ImageControlFactory private => NULL
templateFactory private => NULL
template private => Nette\Bridges\ApplicationLatte\Template #fe5d
latte private => Latte\Engine #2d96 { ... }
file private => "/var/www-netteprojects/cis/app/components/PageContentControl.latte" (72)
params private => array (13) [ ... ]
invalidSnippets private => array ()
snippetMode => NULL
params protected => array ()
components private => array (4)
paragraph0 => ParagraphControl #ced1 { ... }
image1 => ImageControl #e6a1 { ... }
paragraph2 => ParagraphControl #ed22 { ... }
file3 => FileControl #ef92 { ... }
cloning private => NULL
parent private => App\Presenters\HomepagePresenter #55bd
name private => "pageContent1" (12)
monitors private => array (1)
"Nette\Application\UI\Presenter" => array (4) [ ... ]

Diky predem za kazde nakopnuti.

petas

P.S. Pokud budou potreba kody, poslu. Nechtel jsem, aby byl dotaz moc dlouhy…

petas
Člen | 2
+
0
-

Trosicku jsem se posunul. Link z komponenty pageContent funguje.
HomepagePresenter (zkraceny):

class HomepagePresenter extends BasePresenter
{
        public function injectPageContentControlFactory(\IPageContentControlFactory $factory)
        {
            $this->PageContentControlFactory = $factory;
        }

        protected function createComponentPageContent()
        {
            return $this->PageContentControlFactory->create($this->actualPath);
        }
}

Homepage/default.latte:

{block content}

    {control pageContent}

{/block}

Komponenta pageContent se vytvori „na vyzadani“ ze sablony a korektne se attachne k presenteru a linky funguji.
U subkomponent jsem neprisel na to, jak je atachnout ke komponente pageContent, protoze nevim kolik jich bude a jakeho typu, loaduji se dynamicky, pridavam index ke jmenu kazde subkomponenty, takze tovarnicku s konstantnim jmenem nemuzu pouzit. Zkousim pridavat subkomponenty pomoci

addComponent()

v metode render komponenty pageContent, ale tohle vyhazuje pak na linku BadSignalException:

class PageContentControl extends UI\Control {

public function render() {
    .........
	$i = 0;
	$items = $this->pageContent['obsah'];
	foreach ($items['castiObsahu'] as $item) {
        .........
    	if ($item['typ']=='soubor') {
        	$control = new \FileControl($item, $this->actualPath);
          	$this->addComponent($control, 'file'.$i);
          	$control->setParent($this);
     	}
        .........
    $i++;
	}
    .........
}

}

Existuje nejake reseni v ramci komponenty pageContent nebo je jediny zpusob vytvorit vsechny subkomponenty v tovarnicce komponenty v presenteru?