Neexistující authenticator

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

Ahoj,

stáhnul jsem si novou verzi Nette, napojil jsem to na dibi, ale mám problém s authenticatorem. Když volám $this->getUser()->login(…) vyhodí mi to exception Service of type Nette\Security\IAuthenticator not found.

Authenticator používám ten výchozí, který mám v models, namespace Models. Používám modelLoader.

V configu mám tyto services:

<?php
services:
		database:
			class: DibiConnection
			arguments: [%database%]
		modelLoader:
			class: ModelLoader
			arguments: [@container]
?>

v boostrapu pak:

<?php

$container->addService('authenticator', function ($container) {
    return $container->modelLoader->Authenticator;
});

?>

nevíte, v čem by mohl být problém, popř. co sem mám ještě postnout? Díky moc.

Editoval wise (14. 1. 2012 10:41)

saimons
Člen | 293
+
0
-

Ja jsem vcera resil presne ten samej problem, nevim kde presne je chyba, to ti asi poradi nekdo zkusenejsi. Ale presunul jsem pridani sluzby z PHP do configu (tak jak je to v sendboxu) a uz to jelo.

wise
Člen | 161
+
0
-

a jak si to udělal? zoušel sem t a nešlo mi to

saimons
Člen | 293
+
0
-

Ja to mam na Nette\Database, ale na dibi by to asi melo vypadat stejne:

        services:
                database:
                        ...

                authenticator: Authenticator( @database )
---------------------
private $database;

class Authenticator extends Object implements NS\IAuthenticator {
	public function __construct($database) {
	$this->database = $database;
    }

Asi by to melo fungovat i autowiringem, ze nebudes v configu predavat parametr @database a v construktoru das neco takoveho pro dibi (nevim presne): __construct(\DibiConnection $database). Doufam, ze je to jak rikam, nemam s tim taky moc zkusenosti. Snad me kdyztak nekdo opravi.

Editoval saimons (12. 1. 2012 21:40)

ViPEr*CZ*
Člen | 813
+
0
-

No v konfigu by to mělo být spíše. Já tam třeba mám:

authenticator: MyAuthenticator

A pak v MyAuthenticator stačí v kontruktoru získat pro Nette\Database takto:

function __construct(Nette\Database\Connection $connection)
{
   $this->connection = $connection;
}
wise
Člen | 161
+
0
-

Koukám, že jsem se v úvodu přepsal, potřebuju to napojit na dibi, to už mám, ale je tu problém s tím Service of type Nette\Security\IAuthenticator not found

class Authenticator mám v namespace Models, nemůže to dělat problémy?

Editoval wise (14. 1. 2012 11:25)

wise
Člen | 161
+
0
-

Tak už jsem to vyřešil, do configu jsem přidal název Authenticatoru + jsem ho přidal i do bootstrapu.

matoni555
Člen | 40
+
0
-

Také jsem to teď řešil, stačí přidat do config.neon mezi services toto:

	services:
		authenticator:
			class: Authenticator