Authenticator – návod Quickstart, chyby v návodu
- mildabre
- Člen | 62
Při vytváření ukázkové aplikace TodoList ze sandboxu v downloadu NetteFramework-2.0.6-PHP5.3 podle návodu https://doc.nette.org/cs/quickstart jsem narazil na nesrovnalosti v ukázkovém kódu kde se popisuje úprava Authenticatoru.
1 problém
Na stránce https://doc.nette.org/cs/quickstart návodu úplně dole je řečeno, že by se měl Authenticator předělat a předat mu UserRepository. Ukázkový kód ale autoři nedodali !"
Původní kód ze sandboxu:
<?php
// soubor
/** @var Nette\Database\Connection */
private $database;
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
?>
Je potřeba místo připojení do databáze $this->database předat objekt userRepozitory – např. takto (toto v návodu chybí):
<?php
/** @var Todo\UserRepository */
private $userRepository;
public function __construct(Todo\UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
?>
2. problém
V návodu quickstart v kapitole Přihlašování uživatelů ( https://doc.nette.org/…thentication ) je v definici funkce authenticate() volána výjimka NS\AuthenticationException(…) – Nette ale tuto třídu nezná. Opravil jsem to na Nette\Security\AuthenticationException(…) a už to funguje.
- ViPEr*CZ*
- Člen | 817
Ad1) Ono to tam není vypsané… asi by to chtělo pro lidi co to
nepochopí… ale nad tím se ukazuje autowiring… a jde jen o to namísto
služby pro Connection změnit na UserRepozitory… to by měl, ale každej už
zvládnout ;-)
Ad 2) a todle tam funguje: return new NS\Identity($row->id, NULL,
$row->toArray()); :-) Chce se to asi trochu podívat hore … není
tam náhodou použit alias pro namespace… use Nette\Security
as NS;
Editoval ViPEr*CZ* (22. 11. 2012 20:57)
- Nox
- Člen | 378
- Je fakt, že je otázka, jestli/jak/jak moc v dokumentaci používat aliasy. Je taky rozdíl mezi zkrácením na třídu (AuthenticationException), zkrácením na část cesty (Security\AuthenticationException) nebo zavedením něčeho úplně novýho (NS\AuthenticationException). V docs bych se vyhnul minimálně tomu poslednímu. Vím, že se předpokládá znalost PHP, ale zrovna to třetí minimálně může mást
Editoval Nox (22. 11. 2012 22:24)
- mildabre
- Člen | 62
V ukázkové aplikaci Quickstart by měly být všechny kódy které se v sandboxu dělají uvedeny – většinou to zkoumají začátečníci, kteří pak ztratí hodiny koumáním co tam je vlastně špatně a ztratí myšlenkovou nit toho tutoriálu.
Dokonce ani ukázkové kódy aplikace uložené na GitHubu mají ty chyby v sobě – asi to autor netestoval.
- Nox
- Člen | 378
Jaké chyby? V 1 zmiňuješ chybějící ukázku, když chybí tak nebude chybná. Ve 2 pak namespace, ten je ale na githubu v pořádku https://github.com/…nticator.php
- Šaman
- Člen | 2659
Tak já napíšu na čem všem se zasekli studenti v rámci předmětu Nette:
- QS je připravený na Composer, začátečník si však nakopíruje Nette ručně a loader pak nefunguje.
- Authenticator má přidaný NS, v sandboxu ne.
- V připravené databázi jsou jiní uživatelé a hesla, než je napsáno v dokumentaci.
- mildabre
- Člen | 62
Nox napsal(a):
Jaké chyby? V 1 zmiňuješ chybějící ukázku, když chybí tak nebude chybná. Ve 2 pak namespace, ten je ale na githubu v pořádku https://github.com/…nticator.php
Na tom githubu kam jsi dal odkaz je:
<?php
class Authenticator extends Nette\Object implements Security\IAuthenticator
{
/** @var UserRepository */
private $users;
public function __construct(UserRepository $users)
{
$this->users = $users;
}
?>
Zatímco v ukázkovém tutoriálu quickstart by mělo být něco malinko odlišného:
<?php
/** @var Todo\UserRepository */
private $userRepository;
public function __construct(Todo\UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
?>
Ten rozdíl je minimální. Člověk na to samozřejmě časem přijde, ale tutoriál by takovéto chyby neměl obsahovat. Když do toho neznalý jedinec vlítne tak mu to rozhodí myšlenkové vlákno toho podstatného. Stačí potom více takovýchto drobností a 60% času jedinec věnuje neproduktivním pokusům a omylům.
Ten tutoriál je jinak velmi dobrý, jenom by to chtělo doladit těchto pár detailů.