Authenticator – návod Quickstart, chyby v návodu

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

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
+
0
-

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
+
0
-
  1. 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
+
0
-

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
+
0
-

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 | 2666
+
0
-

Tak já napíšu na čem všem se zasekli studenti v rámci předmětu Nette:

  1. QS je připravený na Composer, začátečník si však nakopíruje Nette ručně a loader pak nefunguje.
  2. Authenticator má přidaný NS, v sandboxu ne.
  3. V připravené databázi jsou jiní uživatelé a hesla, než je napsáno v dokumentaci.
mildabre
Člen | 62
+
0
-

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ů.