Ako dostať model do presenteru?

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

Vitajte,
a ak môžte vysvetlite mi prosím niekto čo robím zle, pri vytváraní a používaní modelu.
Tracy hlási:

Nette\DI\ServiceCreationException
No service of type App\Presenters\App\Model\MainModel found. Make sure the type hint in App\Presenters\RegistPresenter::__construct() is written correctly and service of this type is registered

V config.neon mám:

services:
	- App\RouterFactory
	router: @App\RouterFactory::createRouter
	- App\Model\MainModel

Do presenteru sa to snažím dostať takto:

namespace App\Presenters;

use	Nette,
	Nette\Security\Passwords,
	Nette\Diagnostics\Debugger;

/**
 * Registration presenter.
 */
class RegistPresenter extends \App\Presenters\BasePresenter
{
	/** @var Nette\Database\Context */
	private $database;
	/** @var App\Model\MainModel */
	private $mainModel;

	public function __construct(Nette\Database\Context $database, App\Model\MainModel $mainModel)
	{
		$this->database = $database;
		$this->mainModel = $mainModel;
	}
...

A ten model vyzerá takto:

namespace App\Model;

use 	Nette,
	Nette\Diagnostics\Debugger,
	App\Model\Exceptions;
/**
*Main model class
*@method RegisterUser
*/

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

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

Snažím sa to robiť presne podľa: https://github.com/…resenter.php
Môže mi s tým niekto poradiť?
Díky!

Editoval Čamo (9. 7. 2014 15:04)

Jan Endel
Člen | 1016
+
+1
-
public function __construct(Nette\Database\Context $database, App\Model\MainModel $mainModel)

přepiš na

public function __construct(Nette\Database\Context $database, \App\Model\MainModel $mainModel)

více infa zde

one-two
Člen | 80
+
0
-

App\Presenters\App\Model\MainModel vs App\Model\MainModel

Čamo
Člen | 798
+
0
-

Ok teraz to funguje. Díky. Ma to samozrejme napadlo s tým lomítkom, ale bola tam ešte iná chyba, ktorá mi to rozbíjala…

Ale nechápem, prečo to v tomto príklade funguje bez toho lomítka: https://github.com/…resenter.php
Tam by to predsa malo hádzať presne takú istú chybu. Toto mi vie niekto vysvetliť?

Čamo
Člen | 798
+
-4
-

To si si mohol odpustiť nie? Už som to čítal a niečo mi uniká. To sa ti nikdy nestalo? Podľa toho to totiž v tom príklade nemôže fungovať.

Čamo
Člen | 798
+
0
-

To som tam mal. Chyba bola inde. Zostal mi tam kúsok kódu, ktorý tu nevidno a hádzalo skoro to tú istú chybu tak som si to nevšimol. Dá sa to pochopiť, že niekto kto začína sa občas v tom stratí?

Mysteria
Člen | 797
+
+3
-

@Čamo: To se samozřejmě pochopit dá, ale zase musíš pochopit ty, že když tvůj každý druhý problém je způsoben chybou ve jmenných prostorech, které si stále nedostudoval / nepochopil, tak to ty lidi dokáže trošku vytočit. :)

Čamo
Člen | 798
+
0
-

To ja chápem ale nieje ľahké prekročiť svoj tieň. Fakt robím maximum. Snažím sa mať v hlave celú dokumentáciu Nette, čítam anglickú dokumentáciu, ktorú si myslím, že chápem(ale nechápem) a ešte rozmýšľať nad štruktúrou projektu. To je na začiatočníka dosť nie?

PS:Dnes už teda otázku prečo mi nefunguje $form->addError() nepoložím.

Editoval Čamo (9. 7. 2014 16:10)

Pavel Macháň
Člen | 282
+
0
-

Čamo napsal(a):

To ja chápem ale nieje ľahké prekročiť svoj tieň. Fakt robím maximum. Snažím sa mať v hlave celú dokumentáciu Nette, čítam anglickú dokumentáciu, ktorú si myslím, že chápem(ale nechápem) a ešte rozmýšľať nad štruktúrou projektu. To je na začiatočníka dosť nie?

PS:Dnes už teda otázku prečo mi nefunguje $form->addError() nepoložím.

@Čamo Ono je sice pěkné, že máš v hlavě celou dokumentaci Nette, ale ono se to chce spíš naučit základy jazyka ve kterém píšeš.

BTW: Klidně se na $form->addError() zeptej :)

Editoval Pavel Macháň (9. 7. 2014 16:24)

Čamo
Člen | 798
+
0
-

Pavel Macháň:
No však sa to učím – na príkladoch.
A je aj otázne čo sú to základy jazyka.
Však zase už som to dúfajme pochopil. Keby to šlo tak vám mailom pošlem všetkým nanuky. Ale neviem ako to zorganizovať. Asi by ich už nikto nerozšifroval.

Mysteria
Člen | 797
+
0
-

Základy jazyka se myslí to, aby jsi se nejdřív naučil psát v čistém PHP, pochopil jmenné prostory, objektový model, dědičnost, rozhraní a podobně. Bez toho se prostě nehneš a budeš mít problém nesouvisející s frameworkem takovým ať už budeš psát v Nette nebo v čemkoliv jiným.

Filip Procházka
Moderator | 4668
+
+2
-

Myslím si, že 80% tvých problémů by vyřešilo použití IDE, protože IDE by ti řeklo, kdybys používat třídu a měl blbě namespace, protože by podle něj neexistovala.

Podívej se na tohle a začni používat PhpStorm.

Čamo
Člen | 798
+
0
-

Tak dobre teda, končím s Nette a idem sa učiť phpčko. Máte pravdu. A to som si už myslel, že to začínam chápať.