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 :)