špatný zápis – latte foreach
- JazeX
- Člen | 10
Ahoj, vím, že mám někde chybu, ale koukám na to už dobrou hodinu a
vážně ji nevidím.
Můžete mi prosím pomoct?
Presenter:
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
final class AdminPresenter extends Nette\Application\UI\Presenter
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault(): void
{
$this->template->prokliky = $this->database->query('SELECT * FROM clicks')->fetch();
}
}
Šablona:
{if $prokliky}
<h2>Prokliky</h2>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Kontrakt</th>
<th scope="col">Zpracovatel</th>
<th scope="col">CPC</th>
<th scope="col">IP adresa</th>
<th scope="col">DNS záznam</th>
<th scope="col">Odkazující</th>
<th scope="col">HTTP hlavička</th>
</tr>
</thead>
<tbody>
{foreach $prokliky as $proklik}
<tr>
<th scope="row">{$proklik->cID}</th>
</tr>
{/foreach}
</tbody>
</table>
{/if}
Výsledek:
Notice
Trying to get property 'cID' of non-object
Pokud se rozhodnu error přeskočit:
Nette\MemberAccessException
Cannot read an undeclared property Nette\Utils\DateTime::$cID.
Foreach proběhne, pokud smažu {$proklik->cID}
, vytvoří
řádek v tabulce pro každý záznam. Já akorát fakt netušim, co v tom
píšu špatně.
Stejně tak si nejsem vědom, že bych \Utils\DateTime kdekoliv použil.
Mockrát díky.
//EDIT:
Zkusil jsem si dumpnout $proklik[‚cID‘], vypíše jedničku. Netuším, kde
by mohla být chyba.
Editoval JazeX (18. 3. 2020 20:31)
- Šaman
- Člen | 2667
Nedávej na konec ->fetch()
.
Samotná metoda query()
vrací iterovatelný
ResultSet
. Po zavolání fetch()
dostaneš jeden
řádek Row
, nebo null
.
Ty tedy do šablony do proměnné $prokliky
předáváš první
nalezený proklik, nebo null. A to pak zkoušíš prohnat foreachem.
Edit: Nebo teda to fetchAll()
, což vrátí všechny výsledky
jako pole. Foreachi je jedno, jestli přijde ResultSet
, nebo
array
, s obojím umí pracovat.
Editoval Šaman (18. 3. 2020 20:56)