Dynamické načítání služeb v basePresenter

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

Zdravím vás
dostal jsem se do komplikace k řešení dynamického načítání služeb|modelů z databáze podle jmen tříd.
Snažím se je načíst pomocí context->addService(jmeno, třída) avšak nikde nejsou vidět

basePressenter.php

protected function startup() {
        parent::startup();
        \Tracy\Debugger::$maxDepth = 7;

        $this->updates      = $this->context->updates;

        $pluginServices = $this->updates->getClassType('model');
        foreach($pluginServices as $services) {
            $class = $services->class;
            $this->context->addService($services->class, new $class());
        }
...

model vypadá například takto, avšak se trápím i s injekcí Dibi,.. neví někdo, jak na to?

<?php
use Nette\Http\IReques,
    Nette\Utils\Strings,
    Nette\Utils\DateTime;

class module_item_cover extends \Nette\Object {

    /** @var \DibiConnection */
    private $db;

    private $t_module_item_cover = "module_item_cover";

	// jak injektovat Dibi?
    public function __construct() {

    }

    // ADD COVER
    public function addCover($cover_id, $title, $description = null, $hyperlink = null) {
        return $this->db->insert($this->t_module_item_cover, array(
            "cover_id"      => $cover_id,
            "title"         => $title,
            "description"   => $description,
            "hyperlink"     => $hyperlink,
            "createtime"    => new DateTime()
            ))->execute(dibi::IDENTIFIER);
    }

a konečné spojení v nějakém modulu

namespace App\Components;

use Nette\Application\UI;

class plugin_itemCover_admin extends UI\Control {

    private $module;
    private $id;
    public function __construct($id) {
        $this->id       = $id;
    }

    public function startup($id) {
        //Zde nevím jak zavolat správně službu
		//$this->module   = $this->presenter->context->module_item_cover;
    }

    public function render() {
        $this->template->setFile(__DIR__ . '/plugin_itemCover_admin.latte');
        $this->module->addCover($id,"Zkouška");
        $this->template->render();
    }
}

Moc děkuji za jakékoliv rady, vcelku jsem se na tom už několik dní sekl, a nevím jak ven.

Martk
Člen | 661
+
0
-

Přidávat a šahat na služby v context není moc dobrý způsob, co takhle jiný? Jak vypadá třída v proměnné $this->updates?

Editoval Antik (5. 4. 2016 16:39)

Wailey
Člen | 48
+
0
-

Jiný mě bohužel pro načítání externích balíčků včetně aktualizací nenapadá. Služba Update je nahozena klasicky staticky z Configu.
jinak fce getClassType vrací pole dat(včetně názvu třídy) posledních nainstalovaných aktualizací podle verze.

edit: načítání jsem rozjel, avšak stále problém s injekcí dibi :(

Editoval Wailey (6. 4. 2016 19:01)