Chyba ve vykreslování templatu pro fórum

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

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

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

Aaaaa, já idiot! Kámo budu ti líbat nohy!!! :-D

Díky :)

Prokop
Člen | 31
+
0
-

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

David Zadražil
Člen | 62
+
0
-

Ani ta FlashMessage se ti neobjeví?

Prokop
Člen | 31
+
0
-

David Zadražil napsal(a):

Ani ta FlashMessage se ti neobjeví?

Ani ta

David Zadražil
Člen | 62
+
0
-

Zkus místo

$form = new Form;

dát

$form = new \Nette\Application\UI\Form();
Prokop
Člen | 31
+
0
-

pomohlo, díky :)