První aplikace – Authenticator – nejasná dokumentace
- pesi
- Člen | 2
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?
- pesi
- Člen | 2
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
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)