Chyba ve vykreslování templatu pro fórum
- Prokop
- Člen | 31
Zdravím,
mám vytvořené fce a template pro vykreslení všechy příspěvků ve db dle
data, pořád mi to vyhazuje chybu, prosím o radu kde ta chyba je.
ForumRepository.php fce
public function fetchForumAll($name/*, array $order = array()*/)
{
return $this->getCustomTable($name)->order('posted DESC')->fetch();
}
ForumPresenter.php akce pro vykresleni templatu „world“
public function renderWorld() {
$this->template->entries = $this->forumRepository->fetchForumAll($this->name);
}
world.latte ve správné složce Forum
{block content}
<h1>World forum</h1>
<div class="list">
{if count($entries) > 0}
{foreach $entries as $entry}
<div class="entry">
<div class="author">{$entry->author_id}</div>
<div class="text">{!$entry->text|escape|nl2br}</div>
<div class="posted">{$entry->posted}</div>
</div>
{/foreach}
{else}
<div class="notice">No entry added.</div>
{/if}
</div>
Vyhazuje mi to stále chybu „Trying to get property of non-object“ na řádku:
19: <div class="author"><?php echo Nette\Templating\Helpers::escapeHtml($entry->author_id, ENT_NOQUOTES) ?></div>
(když ho zakomentuju chyba je na dalším řádku také atd.)
Pro upřesnění v databazí jsou záznamy id, author_id, text, posted.
Díky
- saimons
- Člen | 293
Pokud na ten SELECT das fatch(), tak ti to vrati jeden radek https://doc.nette.org/cs/database#…, tak je pak blbost to prochazet pres foreach.
Editoval saimons (8. 11. 2012 10:23)
- Prokop
- Člen | 31
Ještě jeden dotaz…
Stejný formulář, (nevypsaná)chyba zapisování do db.
TableRepository.php pro práci s db (je už připojeno)
public function insert(array $values)
{
return $this->connection->table('forum_public')->insert($values);
}
ForumPresenter.php
private $entries;
private $forumRepository;
public function injectForumRepository(Game\ForumRepository $forumRepository)
{
if ($this->forumRepository) {
throw new Nette\InvalidStateException('Article has already been set');
}
$this->forumRepository = $forumRepository;
}
protected function createComponentForumForm()
{
$form = new Form;
$form->addHidden('author_id', 'Author id:');
$form->addHidden('posted', 'Posted:');
$form->addTextArea('text', 'Text:')
->setRequired('You must write some text.')
->addRule(Form::MAX_LENGTH, 'Text can be max %d lenghts long', 1000);
$form->addSubmit('send', 'Send')
->onClick[] = $this->forumFormSubmitted;
$form->addProtection();
return $form;
}
public function forumFormSubmitted($button)
{
$values = $button->getForm()->getValues();
$values['author_id'] = $this->readCharacterSession('id');
$values['posted'] = new DateTime();
$this->forumRepository->insert($values);
$this->flashMessage('Succesfully added.');
$this->redirect('this');
}
public function renderDefault()
{
}
public function renderPublic() {
$name = 'forum_public';
$this->template->entries = $this->forumRepository->fetchForumAll($name);
}
Mám to takto řešené, jelikož bych chtěl aby jednotlivé typy .latte byly různá fóra. (public.latte = public forum; friends.latte = friends forum). Proto jsou také upraveny fce na vybírání databáze, které nastavím vlastně jen ve fci „renderXXX“ z jakého fóra a do jakého se bude ukládat.
No a můj problém:
Vykreslení tabulky dle data funguje supr, ale přidání do tabulky nelze.
Nevyhodí žádnou chybu, jen se refreshne stránka, v tabulce však
záznam není.
Díky