Registrácia užívateľov – návod

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

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
+
0
-

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
+
0
-
<?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
+
0
-

Daj sem zdroják ktorý ti vracal „Multiple services of type Nette\Database\Connection found“.

Ako ti vyzerá BasePresenter?

lime
Člen | 55
+
0
-

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

David Matějka
Moderator | 6445
+
0
-

jak vypada tvuj config.neon?

lime
Člen | 55
+
0
-

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
+
0
-

smaz tu database v sekci services.. o vytvoreni sluzby se postara to database pod sekci nette

lime
Člen | 55
+
0
-

matej21 napsal(a):

smaz tu database v sekci services.. o vytvoreni sluzby se postara to database pod sekci nette

Teraz mi to hádže výnimku: Nette\DI\ServiceCreationException

Service ‚authenticator‘: Reference to missing service ‚database‘.

ViPEr*CZ*
Člen | 818
+
0
-

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? :-)

Editoval ViPEr*CZ* (7. 12. 2013 22:27)

lime
Člen | 55
+
0
-

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 :)

ViPEr*CZ*
Člen | 818
+
0
-

Takhle
services:
authenticator:
class: MyAuthenticator
arguments: [@database]

to lze taky, ale je to složitější. Musí se tam definovat služba database (což bude v postatě takový alias):
database: @Nette\Database\Connection