Odkaz v komponentě na vlastní handle neobsahuje parametry presenteru
- ZahorskyJan
- Člen | 59
V šabloně komponenty chci odkaz na její vlastní handle, ale vygenerovaný odkaz neobsahuje parametry presenteru.
Podle dokumentace by to mělo fungovat:
Signál se vždy volá na aktuální view s aktuálními parametry,
parametry signálu se jen přidají. Navíc se přidává hned na začátku
parametr ?do, který určuje signál.
Co přehlížím nebo mám špatně? Předem díky za nápady.
Mám presenter a v něm renderOrderDetail()
. Presenter
vytváří komponentu pomocí továrny a nastavuje ID objednávky z parameteru
presenteru.
<?php
public function createComponentCustomerOrders()
{
$control = $this->customerOrdersFactory->create();
if ( $this->getAction() == 'orderDetail' )
{
$control->setDetailId($this->getParameter('id'));
}
return $control;
}
?>
Komponenta je potomkem UI\Control a má vlastní šablonu. V šabloně
presenteru OrderDetail.latte
volám jenom tu komponentu
{control customerOrders:detail}
. Render v komponentě
vypadá takto:
<?php
public function renderDetail()
{
// nacitani informaci o objednavce
$this->template->setFile( __DIR__ . '/Controls/CustomerOrderDetail.latte');
$this->template->render();
}
?>
A samotný odkaz v šabloně komponenty:
<a n:href="downloadInvoice! invoiceId => $order->getInvoiceId()">faktura</a>
Jsem na adrese: http://localhost/muj-ucet/detail-objednavky/1501
a výsledek odkazu na handle
je: http://localhost/muj-ucet/detail-objednavky?customerOrders-invoiceId=6219316&do=customerOrders-CustomerOrders-downloadInvoice
Po parameteru presenteru ani vidu.
Routa:
<?php
$public[] = new Routers\Route('[<locale=cs cs|sk>/]muj-ucet[/<action>[/<id>]]', [
'module' => 'Shopping',
'presenter' => 'Customer',
'action' => [
Routers\Route::VALUE => 'default',
Routers\Route::FILTER_TABLE => [
'prihlasit' => 'login',
'odhlasit' => 'logout',
'zapomenute-heslo' => 'forgottenPassword',
'registrovat' => 'registration',
'obnovit-heslo' => 'recoveryPassword',
'zakladni-informace' => 'basicInformation',
'objednavky' => 'orders',
'detail-objednavky' => 'orderDetail',
],
],
'id' => NULL,
], $this->httpSecured ? Routers\Route::SECURED : 0);
?>
Zkoušel jsem není problém, ale nepomohlo:
- nevoalt komponentu s
renderDetail()
ale nechat ten výchozírender()
- upravit routu aby
action
aid
byly povinné - dát do odkazu na handle parametr ID, ale ten se správně propíše jako parameter pro komponentu
A tady mi došly nápady…
- David Matějka
- Moderator | 6445
Hm, dokumentace neni uplne presna. Prenaseji se
- persistetni parametry vzdy (respektive pokud spadaji do scope)
- v pripade odkazovani na
this
(coz je fakticky i signal) se prenaseji parametry uvedene v prislusneaction*
, resprender*
metode v presenteru.
v tvem pripade tedy pridej do metody renderOrderDetail
parametr $id