Pripojenie do databazy v komponente

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

Ahojte,
pouzivam 2.1 a v komponente ked pristupujem do databazy cez context ako zvycajne
tak mi hadze chybu – Cannot read an undeclared property App\FrontModule\GalleryControl::$context.
ako mam pristupit potom do databazy?
dakujem

Michal Vyšinský
Člen | 608
+
0
-

Jestli chceš opravdu přes context tak musíš ještě přes presenter

$this->presenter->context->....

Ale rozhodně lepší řešení bude přes constructor si službu pro práci s databází předat. Třeba s využitím generovaných továrniček.

eerikk
Člen | 11
+
0
-

presenter ale tiez nenajde, lebo component mam v samostatnom php

namespace App\FrontModule;

use Nette,
	Model;

use Nette\Application\UI\Control;
use Nette\Utils\Html;

class GalleryControl extends Control {

  public function renderMain($kategorie)
  {

a ako funguje inicializovanie modelu do konstruktora v 2.1? Lebo kod z 2.0 mi nefunguje
alebo ak dopisem do componentu

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

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

tiez hadze errory, netreba do zadefinovat este v config.neon?

Oli
Člen | 1215
+
0
-

jop, jeste musis definovat sluzbu v configu, kterou si predas do presenteru a v presenteru ji vratis v komponente. Nebo jestli vytváříš komponentu pomocí new, tak si context musíš předat do té třídy v presenteru…

eerikk
Člen | 11
+
0
-

a ako to zadefingujem? zatial som tam pisal iba modely
priklad: Model\Priklad

Pavel Macháň
Člen | 282
+
0
-

eerikk napsal(a):

presenter ale tiez nenajde, lebo component mam v samostatnom php

namespace App\FrontModule;

use Nette,
	Model;

use Nette\Application\UI\Control;
use Nette\Utils\Html;

class GalleryControl extends Control {

  public function renderMain($kategorie)
  {

a ako funguje inicializovanie modelu do konstruktora v 2.1? Lebo kod z 2.0 mi nefunguje
alebo ak dopisem do componentu

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

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

tiez hadze errory, netreba do zadefinovat este v config.neon?

Komponenta

namespace App;

class GalleryControl extends \Nette\Application\UI\Control {
    /** @var Nette\Database\Context */
    private $database;

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

Factory interface

namespace App;

interface IGalleryControlFactory {

    /** @return GalleryControl */
    public function create();

}

Config

services:
	- \App\IGalleryControlFactory

Presenter

class AccountPresenter extends BasePresenter {

    /** @var \App\IGalleryControlFactory @inject */
    public $galleryFactory;

    /** @return \App\GalleryControl */
    public function createComponentGallery() {
        return $this->galleryFactory->create();
    }
}

Editoval EIFEL (2. 3. 2014 21:44)

eerikk
Člen | 11
+
0
-

vdaka EIFEL, a kam sa ma spravne ulozit subor s Factory interface?

Pavel Macháň
Člen | 282
+
0
-

eerikk napsal(a):

vdaka EIFEL, a kam sa ma spravne ulozit subor s Factory interface?

Davam si to tam kam komponentu.
Aby si to jen podle toho nepřepsal tak si přečti https://doc.nette.org/…tion/factory ať víš jak to vlastně funguje :)

Editoval EIFEL (2. 3. 2014 22:42)