Předání parametru mezi Action a Render ve stejném presenteru
- Croc
- Člen | 270
Zdravím,
je možné si nějakým způsobe předat parametr mezi Action a Render?
V Action volám modelovou metodu, která mi z DB vrátí data, která zpracuji a zapíši do skrytých inputů formuláře. Následně bych potřeboval v Render některá z těchto dat předat do šablony. Přijde mi jako hloupost dotazovat se 2× na stejnou věc do DB v Action i Renderu.
Bohůžel jsem nikde nenašel informaci jak je to možné a pokud ano, jaký je zápis.
Díky moc
- Croc
- Člen | 270
To vím. Myslel jsem jestli na to Nette nemá jiný zápis. Hlásí mi to
chybu:
Array to string conversion
.
Třída presenteru:
class ItemPresenter extends BasePresenter
{
/** @var ItemFormFactory
* @inject */
public $itemFactory;
/**
* @var \App\Model\ItemManager
* @inject
*/
public $itemManager;
private $temp = array();
public function actionItemForm($id_item)
{
if(!$this->ItemManager->authenticateItemOwner($id_item)) {
$this->getPresenter()->redirect('User:');
}
$values = $this->itemManager->getItemData($id_item);
if($values){
$this->temp['add_date'] = $this->utilsManager->convertDateFormat($values['add_date']);
$this->temp['itemForm']->setDefaults($temp);
}
//.......
}
}
public function renderItemForm()
{
$this->template->data = $this->temp;
}
}
Šablona:
{block content}
{if $user->loggedIn}
<div class="page-header">
<h1><small>Item</small></h1>
</div>
<div>
{dump($data)}
{$data->item_date}
</div>
{control itemForm}
{/if}
{/block}
Zobrazí se mi toto (pokud skipnu chybu):
array (2)
add_date => "10.02.2005" (10)
//......
Array
Evidentně se to snaží konvertovat pole na string…
Editoval Croc (4. 9. 2015 18:57)
- Azathoth
- Člen | 495
To protože v proměnné temp máš pole. A to pole předáš do šablony
do proměnné data. V poli máš klíče add_date, itemForm. A v šabloně
voláš toto:
{$data->item_date}
takže zde máš 2 chyby:
- klíč item_date v poli není.
- k poli nemůžeš přistupovat takto přes property. Je to pole, tak si to načti jako z pole. Tedy takto
{$data[‚add_date‘]}
a další doporučení: pokud si potřebuješ předat právě 2 proměnné, tak
je lepší si udělat prostě 2 property. Kvůli přehlednosti.
Při používání frameworku je lepší psát třeba delší, ale
čitelnější kód než šetřit na každé proměnné.
A co se týče Nette. Vše, co funguje v čistém PHP, funguje i v Nette.
V Nette navíc funguje i něco dalšího (typicky např. vlastnosti
Nette\Object)
Editoval Azathoth (4. 9. 2015 19:18)