NotORM authenticate – fetch DB data

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

Zdravim, pripojil som si notorm DB do projektu podla návodu a rozdelil stranku na moduly. Pri prihlasovaní použivatela neviem ako zistit cez notorm či sa nachadza v db. Zakladne bolo v authenticator.php :

public function __construct(Nette\Database\Table\Selection $users)
	{
		$this->users = $users;
	}
public function authenticate(array $credentials)
	{
		list($username, $password) = $credentials;
		$row = $this->users->where('username', $username)->fetch();
	...

kedze použivam notorm tak som to urobil takto:

public function authenticate(array $credentials)
	{
	list($login, $password) = $credentials;
	$row = $this->getModel('baseModel')->userExist($email)->fetch();
	....

lenže hlaška: Call to undefined method Authenticator::getModel()
tu funkciu mam v basepresentery. Ako ju vyvolat v authentivate.php alebo ako sa to da inač riesit ?? dakujem

MW
Člen | 626
+
0
-

Ukaz, jak to mas v BasePresenteru..

erzzo
Člen | 49
+
0
-

tak isto to mam ako v tamtom navode

abstract class BasePresenter extends Nette\Application\Presenter
{
    protected function getModel($model)
    {
        return $this->context->modelLoader->getModel($model);
    }
}
MW
Člen | 626
+
0
-

a dedis z BasePresenteru?

erzzo
Člen | 49
+
0
-

To je ta zakladna trieda UserModel = Authenticator a takto ju mam urobenu… len neviem ako to zapisat aby dedila aj od basepresenteru

class Authenticator extends Nette\Object implements NS\IAuthenticator
{...
Bertram
Člen | 75
+
0
-

To v žádnem případě nedělej, předej mu co potřebuje pomocí konstruktoru.

MW
Člen | 626
+
0
-

myslel jsem jestli ten presenter dedi z Base …

erzzo
Člen | 49
+
0
-

nededí praveže. Skusal som to napsiat takto :

class Authenticator extends BasePresenter implements NS\IAuthenticator
    {

lenže potom hádže chybu Trying to get property of non-object na riadku:

protected function getModel($model)
        {
            return $this->context->modelLoader->getModel($model);
        }

v BasePresentery. Bertram ako pomocou konstruktora ?? alebo ako upravit to dedenie ?

MW
Člen | 626
+
0
-

V prikladu se vola model ve FooPresenteru, ktery dedi z BasePresenteru … Predpokladal jsem, ze metoda authenticate je take soucasti nejakeho presenteru, ktery bude dedit z Base…

erzzo
Člen | 49
+
0
-

lenže to je len priklad presentera, ako vybrat data z db a zobrazit ich na template.

MW
Člen | 626
+
0
-

modelLoader jsi rozchodil?

erzzo
Člen | 49
+
0
-

modelLoader je sučastou toho navodu čo som robil. Ten funguje len v tom authentivate.php neviem načitat, konkretny model lebo nededim od BasePresenteru.

Melmen
Člen | 132
+
0
-

erzzo napsal(a):

nededí praveže. Skusal som to napsiat takto :

class Authenticator extends BasePresenter implements NS\IAuthenticator
    {

lenže potom hádže chybu Trying to get property of non-object na riadku:

protected function getModel($model)
        {
            return $this->context->modelLoader->getModel($model);
        }

v BasePresentery. Bertram ako pomocou konstruktora ?? alebo ako upravit to dedenie ?

K tomuhle si přečti toto, taky mi to pomohlo :)

Stačí vyměnit

$dsn = "{$db->driver}:host={$db->host};dbname={$db->database}";

za

$dsn = "{$db['driver']}:host={$db['host']};dbname={$db['database']}";
erzzo
Člen | 49
+
0
-

sorry ale nevšimol si si, že to ja som tamtu temu tiež založil ? :D toto mi všetko ide.. ine sa tu rieši

Melmen
Člen | 132
+
0
-

aaaaa, tak sorry :D

MW
Člen | 626
+
0
-

Projdi si to jeste s timto resenim od Majkla.

erzzo
Člen | 49
+
0
-

no len ako to tak pozerám on to ma robené cez DIBI, s tým som už robil a s tým som to vedel… len ide o NotORM databazu.

MW
Člen | 626
+
0
-

to je v tomto pripade prece jedno, tobe to nevidi getModel. Takze problem bude asi nekde jinde…
Mimochodem, nemas tam nekde Namespace?

erzzo
Člen | 49
+
0
-

no hej nevidi mi to getmodel… namespace nemam lebo to nemam v ziadnom podmodule

MW
Člen | 626
+
0
-

Mimochodem, pokud tedy nededis z BaseModelu, tak by nemala byt ta metota protected…

22
Člen | 1478
+
0
-

proč by to taky mělo getModel vidět, copak ty máš v té třídě nějakou takovou metodu?? Musíš si dopravit do Authenticatoru minimálně nějakou connection s NotORM a pak si vytáhnout NotORM dotazem výsldek z DB.

Tohle mi NotORM nepřipomíná:

$row = $this->getModel('baseModel')->userExist($email)->fetch();
erzzo
Člen | 49
+
0
-

urobil som to tak ako si povedal ze sa v authenticate pripojm na NotORM. Ide to :))
thx man ;)

Nox
Člen | 378
+
0
-

Doufám že tam už nemáš

<?php
class Authenticator extends BasePresenter implements NS\IAuthenticator
?>

authenticator vůbec není presenter („extends“ je silná vazba „je“, např. pes extends savec)

Bertram
Člen | 75
+
0
-

erzzo napsal(a):

urobil som to tak ako si povedal ze sa v authenticate pripojm na NotORM.

Pokud využíváš Srigiho Jednoduchý Model s NotORM, tak používáš i Nette\DI\Container.
Takže můžeš pokračovat v tomto duchu.

V Config.ini doplníš:

authenticator:
	class: Authenticator
	arguments: ['@modelLoader']

A konstruktor tvého Authenticator.php pak bude vypadat takto:

private $model;

public function __construct($modelLoader)
{
	$this->model = $modelLoader;
}

Vše je psáno bez jmenných prostorů, které si musíš doplit.

A poté můžeš v metodě authenticate použít:

$row = $this->model('baseModel')->userExist($email)->fetch();

A pak už tam jenom dopravit trošku soli :)

erzzo
Člen | 49
+
0
-

no paradne :) takto som si to presne predstavoval !! díki ;)
a Nox, ne ne takto som to nedaval. v authenticate som vytvoril nove spojenie s notorm, takto som to riesil ale teraz to este musim upravit ako poradil Bertam

Editoval erzzo (8. 10. 2011 16:31)