non-object problém, zřejmě architektonická chyba

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

Ahoj,

abstract class Repository extends Nette\Object
{
        /** @var Nette\Database\Connection */
        protected $connection;



        public function __construct(Nette\Database\Connection $db)
        {
                $this->connection = $db;
        }



        /**
         * Vrací objekt reprezentující databázovou tabulku.
         * @return Nette\Database\Table\Selection
         */
        protected function getTable()
        {
                // název tabulky odvodíme z názvu třídy
                preg_match('#(\w+)Repository$#', get_class($this), $m);
                return $this->connection->table(lcfirst($m[1]));
        }


        public function findAll()
        {
            return $this->getTable();
        }


        /**
         * Vrací řádky podle filtru, např. array('name' => 'John').
         * @return Nette\Database\Table\Selection
         */
        public function findOneByFind($by)
        {
                return $this->getTable()->find($by)->fetch();
        }
}
<?php

namespace Todo;

use Nette;


class ArticleRepository extends Repository
{
  public function articleShow($id)
  {

     return $this->findOneByFind($id);

  }

  public function articleCategory()
  {
    return $this->findAll();
  }


}
class ArticlePresenter extends BasePresenter
{

	private $articleRepository;

        public $show;


	public function inject(Todo\ArticleRepository $articleRepository)
	{
		$this->articleRepository = $articleRepository;
	}



        public function show($id)
	{
		$this->show = $this->articleRepository->articleShow($id);
	}


        public function renderDefault()
	{
		$this->template->article = $this->show;
	}


}
{block content}

<h1 style="">{$article->title}</h1>

<span style="font-size: 12px;">{!$article->datum} | <a href="">{!$article->autor}</a></span>

{!$article->text}

Jedná se spíše o otázku kontrukce zřejmě, patrně nedojde k předání hodnoty podle idu.

účelem všeho je vypsat do šablony ony proměnné $article ovšem aktuálně mi to vyhazuje chybu http://kerouac.cz/article/?….

nemohu si pomoct ale příjde mi že se to všechno předá jak má, nevidíte v tom něco, díky.

enumag
Člen | 2118
+
0
-

Tipnul bych si, že metoda ArticlePresenter::show() se nezavolá buď vůbec nebo až po renderDefault().

Filip Procházka
Moderator | 4668
+
0
-

Už jsme to vyřešili na chatu

class ArticlePresenter extends BasePresenter
{
	private $articles;
	public $show;

	public function injectArticles(Todo\ArticleRepository $articleRepository)
	{
		$this->articles = $articleRepository;
	}

	public function actionShow($id)
	{
		$this->show = $this->articles->articleShow($id);
	}

	public function renderShow()
	{
		$this->template->article = $this->show;
	}
}