Call to undefined method Nette\Utils\ArrayHash::related()

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

Ahoj, předem se omlouvám, pokud je můj dotaz úplně začátečnický, ale nevím si rady a možná na to jdu ze špatné strany, každopádně ocením pomoc.

Jedná se o chybové hlášení Call to undefined method Nette\Utils\ArrayHash::related()

Mám vlastní třídu pro generování PDF (pomocí mPDF), kde si vytvořím šablonu:

$tpl = new Nette\Templating\FileTemplate(dirname(__DIR__).'/templates/pdf/price_quote.latte');

Do ní si vložím data projektu:

$tpl->project = $project;

Pak je v šabloně vypisuji bez problému, než potřebuji vytáhnout data z navázené tabulky pomocí fce „related“, kterou zde kód již nezná.

Prosím o radu, jak tuto funkci správně v šabloně použít.

(Když používám klasický presenter a šablonu, tak vše funguje, tak je to asi špatně „prolinkované“, ale nevím.)

Díky!

Editoval jandik.n (11. 6. 2015 14:25)

David Matějka
Moderator | 6445
+
0
-

odkud a jak ziskavas $project? ukaz kod

jandik.n
Člen | 41
+
0
-

V presenteru volám fci, kde posílám hodnoty z formuláře:

<?php
$this->priceQuoteMaker->createPriceQuote($values);
?>

Ve tříde priceQuoteMaker mám pak tuto fci:

<?php
public function createPriceQuote($project) {
        $tpl = new Nette\Templating\FileTemplate(dirname(__DIR__).'/templates/pdf/price_quote.latte');
        $tpl->registerFilter(new Nette\Latte\Engine);
        $tpl->registerHelperLoader('Nette\Templating\Helpers::loader');
        $tpl->project = $project;


        $pdf = new \mPDF('', 'A4', 11, 'arial');
        $pdf->ignore_invalid_utf8 = true;
        $pdf->setFooter('|'.date('Y')." © www.nk-translators.com|"); // footer
        $pdf->WriteHTML($tpl);
        $pdfFile = $pdf->Output(dirname(__DIR__).'/../../www/price_quotes/'.$project->number_of_order.'-cenova-nabidka.pdf', 'F');

        return;
    }
?>

Stačí takto? Díky.

Pavel Kravčík
Člen | 1205
+
0
-

Asi bys měl ukázat, kde tedy dostáváš $values.

A tam bude evidetně problém, protože related se volá na activeRow a ne ArrayHash.

David Matějka
Moderator | 6445
+
0
-

nestaci :) to $values v presenteru beres odkud?

jandik.n
Člen | 41
+
0
-

Odešlu vyplněný formulář klasicky:

<?php
$form->onSuccess[] = $this->newProjectFormSubmitted;
?>

A poté zde beru $values:

<?php
public function newProjectFormSubmitted(Form $form) {
        $values = $form->getValues();
		...
		$this->priceQuoteMaker->createPriceQuote($values);
?>

Samotnému mně tu začíná něco nesedět, ale ještě nevím :-)

jandik.n
Člen | 41
+
0
-

Asi tam musím poslat pouze ID projektu a ve třídě ho modelem znovu vytáhnout z databáze a poté ho jako objekt předat do šablony?

Pavel Kravčík
Člen | 1205
+
0
-

Formulář Ti vrací ArrayHash ten nemá related. Takže je to přesně jak říkáš, musíš si to zavolat z modelu a na to můžeš použít ref.

jandik.n
Člen | 41
+
0
-

Ano, use to začíná hýbat, mockrát děkuji za rychlé nakopnutí!