Ukázka řešení s používáním modelů – máte nápady na zlepšení?

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

Ahoj,

zkouším upravit svoje aplikace tak, abych vše kolem databáze dostal pryč z presenterů. Funkční řešení mám, ale zajímá mě, jak by to šlo napsat líp.

Model Article

namespace FrontModule;

use nette;

class Article extends \Nette\Object
{

    /** @var Nette\Database\Context */
    public $database;

    public function __construct(\Nette\Database\Context $database)
    {
        $this->database = $database;
    }

    public function findBy()
    {
        return $this->database->table("article")->fetchAll();
    }

}

HomepagePresenter

namespace FrontModule;

use Nette;
use App\Model;

class HomepagePresenter extends BasePresenter
{

    /** @var Nette\Database\Context */
    public $database;

    private $model;

    public function __construct(\Nette\Database\Context $database)
    {
        $this->database = $database;
    }

    public function renderDefault()
    {
        $this->model = new Article($this->database);
        $this->template->articles = (object) $this->model->findBy();
    }

}

Na tomto řešení se mi nelíbí to, že databáze jde do modelu přes presenter. Zkoušel jsem ji injectnout přímo do modelu, ale to se mi nepovedlo. Díky za rady.

David Matějka
Moderator | 6445
+
+2
-

Na tomto řešení se mi nelíbí to, že databáze jde do modelu přes presenter. Zkoušel jsem ji injectnout přímo do modelu, ale to se mi nepovedlo.

je to snadne:

1. Article registrujes jako sluzbu v config.neon

services:
	- FrontModule\Article

2. pak jen tu tridu vyzadas v konstruktoru namisto database.

Šaman
Člen | 2666
+
0
-

Jednoduchou ukázku základu modelu mám na githubu. Je na Nette 2.2, ale v tomhle základu se myslím nic nezměnilo.

radekBrno
Člen | 61
+
0
-

Díky, opravil jsem si to a funguje to.