vnořený foreach = 1× ze dvou reloadu error/warning
- knedle
- Člen | 34
divná věc se mi stává – mám vnořený foreach – nic neobvyklého :
kod z latte sablony
<tbody n:if="$interprets">
{foreach $interprets as $interpret}
<tr n:foreach="$interpret->related('interpret_song') as $interpretSong">
<td>{$interpret->name}</td>
<td>{$interpretSong->song->title}</td>
<td></td>
<td></td>
</tr>
{/foreach}
</tbody>
vyhazuje pri každém druhém !! reloadu warning s hláškou
Illegal offset type
přičemž ladenka chybu zobrazí zde:
<?php if ($interprets): ?> <tbody>
<?php $iterations = 0; foreach ($interprets as $interpret): $iterations = 0; foreach ($interpret->related('interpret_song') as $interpretSong): ?> <tr>
<td><?php echo Nette\Templating\Helpers::escapeHtml($interpret->name, ENT_NOQUOTES) ?></td>
<td><?php echo Nette\Templating\Helpers::escapeHtml($interpretSong->song->title, ENT_NOQUOTES) ?></td>
<td></td>
<td></td>
</tr>
<?php $iterations++; endforeach ;$iterations++; endforeach ?>
připadá mi to zvláštní – že jednou kód projde, ale po reloadu stránky bez jakékoli změny, ne
asi je něco, co nevím… kde mám chybu/blbost?
edit:
další informace: SQL dotazy z ladenky
reload 1 – 3 –5…
reload 2 – 4 – 6…
verze nette poslední
že by to bylo něco mimo nette? špatná verze PHP? chyba v db?
Editoval knedle (24. 2. 2012 11:16)
- knedle
- Člen | 34
další střípek:
jeden z cache souborů databáze – tj. obsahující serializovaná data
mění s reloadem 2 stavy (pokud ignoruju časové razítko):
stav A:
<?php //netteCache[01]000070a:2:{s:4:"time";s:21:"0.37641100 1330097917";s:10:"serialized";b:1;}?>a:3:{s:12:"interpret_id";b:1;s:7:"song_id";b:1;s:4:"song";b:1;}
stav B:
<?php //netteCache[01]000070a:2:{s:4:"time";s:21:"0.44480300 1330097899";s:10:"serialized";b:1;}?>a:2:{s:12:"interpret_id";b:1;s:7:"song_id";b:1;}
jen nevím zda je to příčina, nebo následek
- Jan Tvrdík
- Nette guru | 2595
Zkus vypnout cachování Nette\Database a stáhnout si poslední vývojovou verzi Nette.
- knedle
- Člen | 34
ještě dotaz – jak se vypne ta cache:
protože tento zápis:
...
services:
templateCacheStorage:
class: Nette\Caching\Storages\DevNullStorage
cacheStorage:
class: Nette\Caching\Storages\DevNullStorage
database: @Nette\Database\Connection
authenticator: Authenticator( @database::table(users) )
interprets:
factory: @database::table(interpret)
songs:
factory: @database::table(song)
...
což je dle návodu z
https://doc.nette.org/cs/caching
services:
templateCacheStorage:
class: Nette\Caching\Storages\DevNullStorage
cacheStorage:
class: Nette\Caching\Storages\DevNullStorage
vyhazuje
Nette\DI\ServiceCreationException
Service ‚nette.cache‘: Multiple services of type Nette\Caching\IStorage found: cacheStorage, templateCacheStorage search