Předání parametru mezi Action a Render ve stejném presenteru

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

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

David Matějka
Moderator | 6445
+
+1
-

class property

Croc
Člen | 270
+
0
-

Bohužel nevím jak to zapsat…

David Matějka
Moderator | 6445
+
0
-

To jsou zaklady OOP http://php.net/…operties.php

Croc
Člen | 270
+
0
-

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
+
0
-

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:

  1. klíč item_date v poli není.
  2. 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)

Croc
Člen | 270
+
0
-

Azathoth napsal(a):

  1. klíč item_date v poli není.

V kódu mám jiné proměnné, tohle je jen příklad, ve kterém jsem se přepsal.

Díky moc za vysvětlení a doporučení :) Už je mi to jasné.

Editoval Croc (4. 9. 2015 19:37)