První aplikace – Authenticator – nejasná dokumentace

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

Nepředpokádám chybu ve frameworku, ale u sebe. Bohužel ji neumim odhalit. Na začátku popisu příkladu v kapitole o Službách máte odstavec:

Nyní je vhodná chvíle upravit si definici Authenticatoru. Definice třídy Authenticator říká, že má dostat jako jediný parametr konstruktoru Nette\Database\Connection (a Nette to pozná a automaticky ho tam předá). To nám ovšem nevyhovuje, raději autentikátoru předáme instanci naší třídy starající se o uživatele: UserRepository.

Navím co to fakticky znamená.

V kapitole o Přihlašování uživatelů se mi objevuje chyba, že v konstruktoru třídy Authenticator je namísto instance typu: Nette\Database\Connection instance typu: ToDo\UserRepository.

Argument 1 passed to Authenticator::__construct() must be an instance of Nette\Database\Connection, instance of ToDo\UserRepository given, called in /var/www/sandbox/temp/cache/_Nette.Configurator/_-e221f1bba233fce3b43e03204730d00a.php on line 104 and defined

Předpokládám, že k vyřešení problému je třeba udělat cosi, co je popsané v tom prvním odstavci. Ale co? A kde všude?

ViPEr*CZ*
Člen | 817
+
0
-

Nejsem žádnej guru, ale evidentní neznalost PHP. Ta chybová hláška je naprosto výmluvná. Prostě jste si neupravil konstruktor authentikátoru. Co takhle změnit tam type hint z Nette\Database\Connection na ToDo\UserRepository :-)

pesi
Člen | 2
+
0
-

To jsem samozřejmě taky zkusil:

	/** @var Nette\Database\Connection */
	private $userRepository;

	//public function __construct(Nette\Database\Connection $database)
	public function __construct(Todo\UserRepository $uR)
	{
		$this->userRepository = $uR;
	}

Ale začaly mi vyskakovat jiné chyby, tak jsem si myslel, že je to ještě v něčem jiném. Ale pokud je toto správná cesta, budu řešit ty další chyby. Dík.

Mimochodem, každá zavlečená chyba nakonec končí chybou PHP, ale to snad ještě neznamená že je to jeho neznalost. Neznalost frameworku snad, taky se s ním teprve seznamuji. Nemám zatím představu, jeké změny v kódu jsou bezpečné a jaké už ne. Závidím vám, že to všechno už víte.

ViPEr*CZ*
Člen | 817
+
0
-

Osobně neumím příliš anglicky… ale toto mluví za vše:
must be an instance of Nette\Database\Connection, instance of ToDo\UserRepository given
To nejde ani o framework, ale o to, že se pokoušíte předat nějakou instanci konstruktoru, který má u parametru nastaven type hint a proto Vám to PHP nedovolí.
Každopádně má-li být v authenticatoru UserRepository, pak se musí přepsat konstruktor jak jsem psal a pokud máte jiné chyby, tak klidně sem s nimi ;-)

Editoval ViPEr*CZ* (15. 3. 2013 22:17)

Šaman
Člen | 2666
+
0
-

Nejprve smaž cache, pokud ti to stále hlásí tuhle chybu. Občas zůstane stará verze nacacheovaná.