Registrácia užívateľov – návod
- lime
- Člen | 55
Učím sa nette a chcel by som niekoho poprosiť aby mi vysvetlil ako
pokračovať v registrácií, zatiaľ toho veľa nemám:
RegisterPresenter:
<?php
use Nette\Application\UI\Form as Form;
class RegisterPresenter extends BasePresenter {
protected function createComponentRegisterForm() {
$form = new Form;
$form->addText('username', 'Prihlasovacie meno:')
->setRequired('Prosím zadajte vaše prihlasovacie meno.');
$form->addPassword('password', 'Heslo:')
->setRequired('Prosím zadajte heslo.');
$form->addPassword('password2', 'Heslo znovu:')
->addRule(Form::EQUAL, 'Zadané heslá sa musia zhodovať', $form['password']);
$form->addSubmit('send', 'Prihlásiť');
$form->onSuccess[] = $this->registerFormSucceeded;
return $form;
}
public function registerFormSucceeded(Form $form) {
$values = $form->getValues();
//tuto neviem čo ďalej
}
}
Editoval lime (7. 12. 2013 19:11)
- James_Scott
- Člen | 55
To je moc obecná otázka. Pak stačí hodnoty z formuláře uložit do
databáze a případně informovat uživatele (redirect, mail..).
O uložení (a další věci jako kontrola existence mailu třeba) by se měl
starat model, ten je potřeba si vstříknout do presenteru. Hledej DI a
podívej se na nějakou hotovou aplikaci.
Nebo to více specifikuj.
- lime
- Člen | 55
<?php
use Nette\Application\UI\Form as Form;
class UserPresenter extends BasePresenter {
protected function createComponentRegisterForm() {
$form = new Form;
$form->addText('username', 'Prihlasovacie meno:')
->setRequired('Prosím zadajte vaše prihlasovacie meno.');
$form->addPassword('password', 'Heslo:')
->setRequired('Prosím zadajte heslo.');
$form->addPassword('password2', 'Heslo znovu:')
->addRule(Form::EQUAL, 'Zadané heslá sa musia zhodovať', $form['password']);
$form->addSubmit('send', 'Prihlásiť');
$form->onSuccess[] = $this->registerFormSucceeded;
return $form;
}
public function registerFormSucceeded(Form $form) {
$values = $form->getValues();
unset($values['password2']);
nejaké_pripojenie->table('users')->insert($values); //???
$this->flashMessage('Registrácia prebehla úspešne', 'success');
$this->redirect('Sign:in');
}
}
- tak som si RegisterPresenter zmenil na UserPresenter a skúsil som to takto, problém je, že mám spravený autentifikátor podľa: https://doc.nette.org/…thentication a v tomto UserPresenteri som nemohol vytvoriť ďalšie pripojenie k databáze lebo mi to hádzalo výnimku „Multiple services of type Nette\Database\Connection found“, a teraz neviem ako tuna dostať pripojenie k databáze
Editoval lime (7. 12. 2013 20:24)
- romiix.org
- Člen | 343
Daj sem zdroják ktorý ti vracal „Multiple services of type Nette\Database\Connection found“.
Ako ti vyzerá BasePresenter
?
- lime
- Člen | 55
romiix.org napsal(a):
Daj sem zdroják ktorý ti vracal „Multiple services of type Nette\Database\Connection found“.
Ako ti vyzerá
BasePresenter
?
riadok 211
public function getByType($class, $need = TRUE)
204: {
205: $lower = ltrim(strtolower($class), '\\');
206: if (!isset($this->classes[$lower])) {
207: if ($need) {
208: throw new MissingServiceException("Service of type $class not found.");
209: }
210: } elseif ($this->classes[$lower] === FALSE) {
211: throw new MissingServiceException("Multiple services of type $class found.");
212: } else {
213: return $this->getService($this->classes[$lower]);
214: }
215: }
robí to pri:
// Run application.
10: $container->application->run();
V base presenteri nemám nič, tam by som mal asi mať nejakú premennú $connection aby ju dedili ostatné presentery, ale neviem ako to to tam dostať lebo mi to hádže túto výnimku
- lime
- Člen | 55
matej21 napsal(a):
jak vypada tvuj config.neon?
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT
accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be
able to see your passwords.
# https://nette.org/…rity-warning
#
common:
parameters:
php:
date.timezone: Europe/Prague
# zlib.output_compression: yes
nette:
application:
errorPresenter: Error
database:
dsn: ‚mysql:host=root;dbname=databaza‘
user:
password:
session:
expiration: 14 days
services:
authenticator:
class: MyAuthenticator
arguments: [@database]
database:
class: Nette\Database\Connection
arguments: [‚mysql:host=localhost;dbname=databaza‘, ‚root‘, '']
routerFactory: RouterFactory
router: @routerFactory::createRouter
factories:
production < common:
development < common:
- David Matějka
- Moderator | 6445
smaz tu database
v sekci services
.. o vytvoreni
sluzby se postara to database
pod sekci nette
- lime
- Člen | 55
ViPErCZ napsal(a):
A v sekci authenticator smaž arguments… o „vztříknutí“ se postará tzv. autowiring.
Tj stačí tam mít jen:authenticator: MyAuthenticator
PS: už jsem jednou nohou v posteli… není náhodou tohle vše v sandboxu? :-)
Jasné, bolo to tam tak „jednoducho“, ale ja sa to ešte iba učím a v nejakom návode (zrejme z tejto stránky) to bolo tak ako som to mal predtým tak som z toho trochu mimo, teraz to už ide tak diky, a dobrú noc :)