registracia novych uzivatelov – hlasi chybu
- David Kudera
- Člen | 455
Ahoj, podle které dokumentace přesně? Jinak ten RegisterPresenter někde
požaduje službu users
, ale ty žádnou takovou v konfiguraci
registrovanou nemáš
- David Kudera
- Člen | 455
Hned ve startup k tomu přistupuje přes context.
$this->users = $this->context->users;
Což by se mimochodem nemělo, tady na fóru je několik příspěvků, jak správně přistoupit ke službám uvnitř presenteru.
No a k problému.. Budeš si tam muset přidat tu službu users.
Edit: ten context nakonec docela chápu, přece jen ten článek je už trochu starší
Editoval David Kudera (14. 7. 2014 11:47)
- Takeshi
- Člen | 596
David Kudera napsal(a):
Hned ve startup k tomu přistupuje přes context.
$this->users = $this->context->users;
Což by se mimochodem nemělo, tady na fóru je několik příspěvků, jak správně přistoupit ke službám uvnitř presenteru.
No a k problému.. Budeš si tam muset přidat tu službu users.
OK ale ako ?
- David Kudera
- Člen | 455
No… Tak, že si přečteš celý ten seriál a ne jen část uprostřed ;-) Tady se vytváří ta služba users totiž
- Takeshi
- Člen | 596
No nech kukam jak kukam, neviem sa z toho vysomarit … aj som skusal pridat
sluzbu ale nejde
pravdepodobne to robim zle, ale neviem ako inak to mam robit … prosim
o konkretny priklad …
ja som pridal nasledovne
services:
- App\Model\UserManager
- App\RouterFactory
router: @App\RouterFactory::createRouter
users:
class: \Users
- David Kudera
- Člen | 455
jj to je správně.. Hlásí ti to nějakou chybu? A tu třídu Users jsi tam zkopíroval?
- Pavel Macháň
- Člen | 282
Takeshi napsal(a):
No nech kukam jak kukam, neviem sa z toho vysomarit … aj som skusal pridat sluzbu ale nejde
pravdepodobne to robim zle, ale neviem ako inak to mam robit … prosim o konkretny priklad …
ja som pridal nasledovneservices: - App\Model\UserManager - App\RouterFactory router: @App\RouterFactory::createRouter users: class: \Users
Stačí jen
services:
- App\Model\UserManager
- App\RouterFactory
router: @App\RouterFactory::createRouter
- \Users
Každopádně nepoužívej context ale dostaň to tam konstruktorem (s tímto zápisem bys to ani jako $this->context->users tahat nemohl)
class RegisterPresenter extends BasePresenter {
/** @var Users */
private $users;
public function __construct(\Users $users) {
parent::startup();
$this->users = $users;
}
}
Editoval Pavel Macháň (14. 7. 2014 12:40)
- Takeshi
- Člen | 596
David Kudera napsal(a):
jj to je správně.. Hlásí ti to nějakou chybu? A tu třídu Users jsi tam zkopíroval?
Trieda Users vyzerá nasledovne
<?php
class Users extends \Nette\Object {
/** @var \DibiConnection */
private $db;
private $table = "users";
public static $user_salt = "AEcx199opQ";
public function register($data) {
unset($data["password2"]);
$data["role"] = "guest";
$data["password"] = sha1($data["password"] . self::$user_salt);
return $this->db->insert($this->table, $data)->execute(dibi::IDENTIFIER);
}
}
?>
A hlási chybu
Class \Users used in service 'users' has not been found or is not instantiable.
btw … kedysi to bolo lahsie… stacilo zavolat
\Model\UserManager::calculateHash($values->newPass)
… teraz ako sa zmenila trieda UserManager … somm z toho vedla
- David Matějka
- Moderator | 6445
V nette 2.2 je pro hashovani hesel trida Nette\Security\Passwords, pro hashovani nepouzivej sha1 ani md5. Viz UserManager v sandboxu (kde je i metoda na pridani uzivatele)
a kde mas ulozenou tu tridu „Users“?
Editoval matej21 (14. 7. 2014 13:01)
- David Kudera
- Člen | 455
Spíš se jen víc začli používat čistější návrhy. Ještě mě napadá, v novým Nette je třída Passwords pro hashování i kontrolu hesla, která se hodí určitě víc.
No a ta třída Users nemá žádný namespace? Např. Model\Users
- Takeshi
- Člen | 596
David Kudera napsal(a):
Spíš se jen víc začli používat čistější návrhy. Ještě mě napadá, v novým Nette je třída Passwords pro hashování https://forum.nette.org/…ilk/php.pngi kontrolu hesla, která se hodí určitě víc.
No a ta třída Users nemá žádný namespace? Např. Model\Users
Takže aby som bol úplne presný … mám to spravené takto …
Users
<?php
namespace App\Presenters;
use Nette,
App\Model;
class Users extends \Nette\Object {
/** @var \DibiConnection */
private $db;
private $table = "users";
public static $user_salt = "AEcx199opQ";
public function register($data) {
unset($data["password2"]);
$data["role"] = "guest";
$data["password"] = sha1($data["password"] . self::$user_salt);
return $this->db->insert($this->table, $data)->execute(dibi::IDENTIFIER);
}
}
?>
config.neon
...
services:
- App\Model\UserManager
- App\RouterFactory
router: @App\RouterFactory::createRouter
users:
class: App\Model\Users
je tam nieco, co by malo byt inak?
Editoval Takeshi (14. 7. 2014 14:13)
- David Kudera
- Člen | 455
A já tu nechám jeden odkaz, který se hodí přečíst: Namespaces. Btw taky jste si všimli, že poslední dobou je tady největší problém s namespacy a že snad v každém příspěvku je odkaz na jejich dokumentaci?
No a píšu to proto, že třídu Users máš z nějakého důvodu v namespace App\Presenters, ale registruješ ji jako App\Model\Users.
Neber si to nijak špatně prosím, co jsem tu napsal.
- Takeshi
- Člen | 596
matej21 napsal(a):
uz jsem to psal, koukni na user manager v novem sandboxu
Aha, jasne prepac … nevsimol som si … otazka je ako tuto funkciu add zavolat v presenteru RegisterPresenter
- David Matějka
- Moderator | 6445
@DavidKudera
Btw taky jste si všimli, že poslední dobou je tady největší problém s namespacy a že snad v každém příspěvku je odkaz na jejich dokumentaci?
ano :) asi to bude tim, ze uz neni podporovana verze nette bez namespaces
- David Matějka
- Moderator | 6445
@Takeshi injectni UserManager a zavolej metodu add
class RegisterPresenter extends ...
{
/** @var \App\Model\UserManager @inject */
public $userManager;
public function nejake_zpracovani_formulare(...)
{
...
$this->userManager->add($username, $password);
}
}
Editoval matej21 (14. 7. 2014 14:32)