Jak použít komponentu přímo v action v presenteru

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

Ahoj napsal jsem si komponentu, která využívá šablony a chtěl jsem se zeptat jak se dá použít přímo v action?
to znamená

public function actionFaktura($id) {
	new Faktura($id);
}

Napíše mi to chybu Component '' is not attached to ‚Nette\Application\UI\Presenter‘. search nevíte prosím jak na to díky

boky
Člen | 18
+
0
-

zoool napsal(a):

public function actionFaktura($id) {
	new Faktura($id);
}
$this->addComponent(new Faktura($id), 'faktura');

ale musis jeste v sablone {control faktura}

zoool
Člen | 89
+
0
-

Jo no ale ta komponenta generuje pdf, tak nevím jestli to mám dávat do šablony.

davidm
Člen | 81
+
0
-

resil bych to spis pomoci Response … neco jako

public function actionFaktura()
{
	$this->terminate(new Faktura());
}
zoool
Člen | 89
+
0
-

No stále to nejde abych to trochu přiblížil, ještě v tom action to trochu upravuji
přidávám var symbol atd
asi takto

$f = new \Faktura('');
$f->var_sym = "123123";
$f->generuj();

a vyhodí chybu…

duke
Člen | 650
+
0
-

PDF se vrací spíše takto:

	$this->sendResponse(new PDFResponse($template));

(PDFResponse lze najít v doplňcích)

Nette\Application\UI\Presenter::terminate již nějakou dobu nepříjímá žádné argumenty.

zoool
Člen | 89
+
0
-

Aha, ještě jeden dotaz tak jsem si stáhl z doplňku komponentu na generování faktur a píše to stejnou chybu je to tam asi tak

$invoice = new \InvoiceControl(date('YmdHis'), 'Faktura - daňový doklad č.');

        // Definition of miscellaneous attributes
        $invoice->setVariableSymbol('1234');

        // Definition of DateTimes
        $dateNow = new \DateTime();
        $invoice->setDateOfIssuance($dateNow);
        $dateExp = new \DateTime();
        $dateExp->modify('+14 days');
        $invoice->setExpirationDate($dateExp);
        $invoice->setDateOfVatRevenueRecognition($dateNow);

        // Definition of Participants
        $supplier = new \MyInvoiceParticipant('Jan Vosáhlo', 'Českobratrská', '11', 'Praha 3 - Žižkov', '13000', '12345678', 'CZ12345678', '123456789 / 1111');
        $customer = new \MyInvoiceParticipant('Pepa Pivrnec', 'Někde', '3', 'Praha 9 - Prosek', '19000', '', '', '123456789 / 1111');
        $invoice->setSupplier($supplier);
        $invoice->setCustomer($customer);

        // Definition of Items
        $item = new \MyInvoiceItem('Testovací item 1', 1, 900, 1.19, TRUE);
        $invoice->addItem($item);

        $invoice->addItems(array(
            new \MyInvoiceItem('Testovací item 2', 1, 900, 1.19, TRUE),
            new \MyInvoiceItem('Testovací item 3', 1, 900, 1.19, TRUE),
        ));

        // Definition of new mPDF
        // Set constant and include according to your directories!!

        define('_MPDF_PATH', LIBS_DIR . '/MPDF54/');
		require LIBS_DIR . '/MPDF54/mpdf.php';
        //include_once(LIBS_DIR . '/mpdf2_5/mpdf.php');
        //iso...don't know why...utf-8 didn't work
        $mpdf = new \mPDF('utf-8');
		//$mpdf->WriteHTML("<h1>AHoj</h1>");
		//$mpdf->Output(NULL,NULL);
		$invoice->exportToPdf($mpdf);

A píše to chybu pořád používám nejnovejší nette 2 děkuji

duke
Člen | 650
+
0
-

Ta chyba ti říká, že komponenta nebyla připojena k presenteru. Nejlíp uděláš, když ji vytvoříš přes továrničku:

protected function createComponentInvoice()
{
	$invoice = new InvoiceControl;
	// @TODO configure invoice
	return $invoice;
}

Když s ní pak pracuješ tímto způsobem:

$invoice = $this['invoice']; // což je totéž jako $invoice = $this->getComponent('invoice');

… tak se ti vytvoří a automaticky připojí k presenteru.

Také ji můžeš připojit „ručně“ přes addComponent, jak už ti doporučoval Boky.

zoool
Člen | 89
+
0
-

Super děkuji funguje to