Problém s přístupem k funkci v presenteru

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

Mám funkci v modelu, kde vůbec nepracuji s databází.

public function getClassrooms(){
            $data=[];$tridy=[];
    if (($handle = fopen("./repositoryV3.csv","r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    if((in_array($data[3],$tridy))==false ){
        $tridy[]=$data[3];
    }
    }
    fclose($handle);
   return ($tridy);
   }
    }

Jak se k ni dostat v presenteru? Vím že kdyby byla ta fce statická tak stačí napsat

$this->template->dataClrs = Model\MorpheusModel::getClassrooms();

ale staticky to nechci. Děkuji za rady

matopeto
Člen | 395
+
0
-

Model si injectnes do presentru, a potom iba

<?php
$this->template->dataClrs = $this->model->getClassrooms();
?>

Editoval matopeto (14. 4. 2015 20:32)

safik
Člen | 11
+
0
-

Díky, akorát vůbec nevím jak na to injectování. Můžete mě někdo popostrčit?

Šaman
Člen | 2666
+
0
-

Tohle je dobře popsáno v dokumentaci.

David Matějka
Moderator | 6445
+
0
-

https://doc.nette.org/…dependencies

(pred injectnutim musis registrovat jako sluzbu)

safik
Člen | 11
+
0
-

Tak jsem to teď zkoušel. Mám to takto:

/** @var \App\Model\MorpheusModel */
    public $model;
    public function __construct(\App\Model\MorpheusModel $mod) {
        $this->$model = $mod;
    }

v neonu mam

services:
	- App\Model\UserManager
	- App\Forms\SignFormFactory
	router: App\RouterFactory::createRouter
morpheusmodel: App\Model\MorpheusModel

vzpiuje mě to toto: Found sections ‚morpheusmodel‘ in configuration, but corresponding extensions are missing. Nevím co s tím. Tuším jsem to vůbec nepobral…

voda
Člen | 561
+
0
-

V neonu máš špatné odsazení, morpheusmodel musí být na stejné úrovni jako ostatní služby.

Pavel Kravčík
Člen | 1196
+
0
-

A když se zeptám hloupě k tomuto tématu, proč to musí injectovat, pokud to není na ničem závislé? Já třeba na dvě tři třídy používám toto. Neviděl jsem důvod to cpát do containeru, pokud to tam není potřeba. Třeba se pletu a někdo fundovanější mi to vysvětlí. :)

private $StoreManager;

public function __constructor()
{
	$StoreManager = new \App\Ext\StoreManager();
}


public function randomFunc($id)
{
	//...

	$this->StoreManager($id);
}
David Matějka
Moderator | 6445
+
0
-

@kzk_cz napr:

  • pri pridavani funkcnosti nebo refaktoringu muze zavislost vzniknout – pak to budes muset upravovat vsude, kde to vytvaris
  • horsi testovani – nemuzes tam poslat mock
Pavel Kravčík
Člen | 1196
+
0
-

@DavidMatějka: Díky. V té mojí situaci (a možná i safikovo) není asi potřeba to injectovat tedy. Přesně to používám při načítání CSV a podobných nesmyslů. Většinou jednorázová akce, která nemá žádné Nette závilosti.