Latte foreach $res as $key ⇒ $val

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

Mám pole objektů z ORADB

array (3) ▼
0 => stdClass #b8db ▼
den => "01-04-2015 00:00:00" (19)
prichod => "01-04-2015 08:19:40" (19)
odchod => "01-04-2015 16:57:11" (19)

1 => stdClass #5b40 ▼
den => "02-04-2015 00:00:00" (19)
prichod => "02-04-2015 08:09:05" (19)
odchod => "02-04-2015 16:42:34" (19)

2 => stdClass #ca37 ▼
den => "03-04-2015 00:00:00" (19)
prichod => "03-04-2015 12:36:23" (19)
odchod => NULL

A potřeboval bych v latte template jednoduše použít

{foreach $all_days as $o => $day}
                    <tr>
                        <td>{$day->den}</td>
                        <td>{$day->prichod}</td>
                        <td>{$day->odchod}</td>
                    </tr>
                {/foreach}

nebo

{foreach $all_days as $day}
                    <tr>
                        <td>{$day->den}</td>
                        <td>{$day->prichod}</td>
                        <td>{$day->odchod}</td>
                    </tr>
                {/foreach}

Bohužel vždy dostanu hlášku Array to string conversion

Je nějaký způsob jak to vypsat normálně bez prasení kodu ?

Kontrolní výpis v presenteru mi funguje

foreach ($incom as $k => $v) {
            var_dump($v->den);
        }

Nebo mi stačí použít jiný způsob uložení(hierarchii) dat v presenteru (posílám do template latte foreach data ve špatném formátu) nebyla pro použití s foreach v latte napsana nějaká pomocná třída nebo něco podobného?

Pro připojení k ORADB používám OCI8 (ne PDO_OCI ani DIBI), jelikož mi ani jedno z již zmíněných nefungovalo a pole objektů vytvářím takto

$res -> // oci_fetch_all()

$incom = array();
        $x = 0;
        foreach ($res as $r) {
            $object = new \stdClass();
            $object->den = $r['DEN'];
            $object->prichod = $r['PRICHOD'];
            $object->odchod = $r['ODCHOD'];

            $incom[$x] = $object;
            $x++;
        }

        return $incom;

Editoval Joacim (3. 4. 2015 14:53)

greeny
Člen | 405
+
+1
-
  1. ukážeš i kód presenteru, kde tu proměnnou předáváš do šablony?
  2. tvůj kód zde by tu hlášku generovat neměl, určitě je to tím?
  3. ukaž případně laděnku (printscreen)
Joacim
Člen | 229
+
0
-

Data z Oraclu si načítám na začátku(při přihlášení), jelikož mám délku přihlášení nastavenou na 2 hodiny, kvůli obnově dat a malé zátěže pro Ora DB, Presenter pro výpis příchodů a odchodů mám tento

class HistoryPresenter extends BasePresenter{
    public function renderDefault() {
        $this->template->all_days = $this->getUser()->getIdentity()->all_days;
    }
}

Výpis z laděnky

Notice

Array to string conversion search►

Source file ▼

File: .../vendor/latte/latte/src/Latte/Runtime/Filters.php:39
29:         * Escapes string for use inside HTML template.
30:         * @param  mixed  UTF-8 encoding
31:         * @param  int    optional attribute quotes
32:         * @return string
33:         */
34:        public static function escapeHtml($s, $quotes = ENT_QUOTES)
35:        {
36:            if ($s instanceof IHtmlString || $s instanceof \Nette\Utils\IHtmlString) {
37:                return $s->__toString(TRUE);
38:            }
39:            $s = (string) $s;
40:            if ($quotes !== ENT_NOQUOTES && strpos($s, '`') !== FALSE && strpbrk($s, ' <>"\'') === FALSE) {
41:                $s .= ' ';
42:            }
43:            return htmlSpecialChars($s, $quotes);


Call stack ▼


1. .../temp/cache/latte/test-app-templates-History-default-latte-ea0b852ae15289da961fe4d784804add.php:17	source ►  Latte\Runtime\Filters:: escapeHtml (arguments ▼)

$s
array (3) ▼
0 => stdClass #9608 ▼
den => "01-04-2015 00:00:00" (19)
prichod => "01-04-2015 08:19:40" (19)
odchod => "01-04-2015 16:57:11" (19)

1 => stdClass #45f8 ▼
den => "02-04-2015 00:00:00" (19)
prichod => "02-04-2015 08:09:05" (19)
odchod => "02-04-2015 16:42:34" (19)

2 => stdClass #20b9 ▼
den => "03-04-2015 00:00:00" (19)
prichod => "03-04-2015 12:36:23" (19)
odchod => NULL

$quotes
0

EDIT – bylo to tím že jsem použil v templatu

{dump($all_days)}

což by mě vůbec nenapadlo, že by to mohlo být tímto a čekal bych minimálně hlášku jako u zapomenutého var_dumpu

Nechápu, proč na každou chybu musím přijít až po tom co se tu jak blbec zeptám

Editoval Joacim (3. 4. 2015 16:07)

Freema
Člen | 18
+
0
-

Šablone {dump $all_days} ti nic nepřepiše to je pak v php jen

<?php
echo Latte\Runtime\Filters::escapeHtml(dump($attribute), ENT_NOQUOTES)
?>
Joacim
Člen | 229
+
0
-

Právě že to data vypsalo, ale bylo to zastíněné chybovou hláškou, kterou jsem vypnul(v pravo nahoře pomocí šipky – ukryl) a daný výstup viděl, proto jsem nevěděl, kde je chyba a furt jsem si myslel, že posílám špatný formát dat do latte foreach

Editoval Joacim (3. 4. 2015 16:45)