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
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.
- Filip Procházka
- Moderator | 4668
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;
}
}