NotORM authenticate – fetch DB data
- erzzo
- Člen | 49
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
- erzzo
- Člen | 49
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 ?
- Melmen
- Člen | 132
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']}";
- 22
- Člen | 1478
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();
- Bertram
- Člen | 75
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 :)