Prihlasenie z ineho presenteru
- nord
- Člen | 52
Zdravim, mam v latte formular
<form method="post" action="loginUser" id="form-login-navi">
... Tu mam vkresleny form cez html tagy
<div class="form-group">
<input type="submit" name="form-submit" value="Prihlásiť">
</div>
</form>
Chcel by som urobit to, ze ked kliknem na prihlasit, tak chcem zavolat akciu
presentera sign.. Ako to mozem urobit ak nechcem aby sa mi nieco renderovalo,
ale len sa vykona akcia a refreshne stranka ?
V inom frameworku som pouzil neico taketo
public function actionLogIn()
{
cez post som dostal data
spracoval
refreshol
}
jednoducho ziadne renderovanie nic, len vykonanie akcie a refresh
Editoval nord (7. 8. 2017 10:02)
- matopeto
- Člen | 395
Doporucujem zacat dokumentaciou od zaciatku: https://doc.nette.org/cs/
Potom formulare: https://doc.nette.org/cs/forms
A sandboxom: https://github.com/nette/sandbox kde mas prihlasovaci formular rovno implementovanim
- nord
- Člen | 52
To co som chcel vediet bolo toto
<form method="post" action="{link Sign:login}" id="form-login-navi">
a presenter
public function actionLogin()
{
$post = $this->getHttpRequest()->getPost();
}
Uz to ide, ale aj tak dakujem za pomoc
Som v nette novy a neviem ako to mate vy ostatny, ale z dokumentacie som sa
nikdy nic nenaucil, ci uz v nette, ci iny framework alebo iny jazyk.. To co mi
vzdy pomohlo bolo riesenie problemov :) Dokumentacia sa mi moc nepaci, pre
cloveka ktory je v nette novy to nie je dost vysvetlene (Ale to je len
moj nazor)
Editoval nord (7. 8. 2017 13:21)
- matopeto
- Člen | 395
@nord sice ti to ide ale dobry pristup to nie je. Radsej sa nauc framework a urob to poriadne – cez nette formulare. Nette sa ti postara o rozne bezpecnostne veci – escapovanie, kontrola hodnot, server side validacia, (aj javascript validacia) xsrf, Ktore takto musis riesit sam.
Bez dokumentacie a pochopenia frameworku daleko nezajdes a ked ano tak to pravdepodobne bude nic moc nebezpecny kod ktory bude ohybat nette (bez urazky)
Pokial sa ti dokumentacia nepaci, prejdi si aspon ten sandbox.
- Pavel Kravčík
- Člen | 1196
@matopeto zapomněl na ten nejdůležitější důvod… přiděláš si kurevsky moc práce do budoucna. :)
- nord
- Člen | 52
A ak chcem mat prihlasovanie v layoute ako modalne okno, teda na kazdej stranke chcem mat moznost sa prihlasit.. Kde mam vytvorit formular ?
Spravil som si FormFactory
namespace App\Forms;
use Nette;
use Nette\Application\UI\Form;
/**
* Class SignInFactory
* @package App\Forms
*/
class SignInFactory extends Nette\Object
{
/**
* @return Form
*/
public function create()
{
$form = new Form;
$form->addGroup();
$form->addText('mail')
->setAttribute('autofocus')
->setType('email')//html5
->addRule($form::MAX_LENGTH, 'E-mail môže mať maximálne %d znakov', 30)
->addRule($form::EMAIL, 'Zadaná hodnota nie je e-mail')
->setRequired('Nevyplnili ste e-mail');
$form->addPassword('password')
->setRequired('Zadajte heslo');
$form->addSubmit('sendForm', 'Přihlásit');
$form->onSuccess[] = [$this, 'loginUser'];
return $form;
}
}
teraz musim v kazdom prezentery ten form vytvarat pri renderovani ?
/**
* @return Nette\Application\UI\Form
*/
protected function createComponentSignForm()
{
$form = $this->signInFormFactory->create();
}
Alebo to robim uplne zle ? :D
Editoval nord (7. 8. 2017 16:06)
- nord
- Člen | 52
Do BasePresenter som hodil toto
/**
* @return Nette\Application\UI\Form
*/
protected function createComponentSignForm()
{
$form = $this->signInFactory->create();
$form->onSuccess[] = function () {
$email = $this->request->getPost('mail');
$password = $this->request->getPost('password');
$authenticator = new Nette\Security\SimpleAuthenticator([
$email => $password,
]);
$this->getUser()->setAuthenticator($authenticator);
$this->getUser()->login($email, $password);
};
$form->onSuccess[] = function () {
$this->redirect('Homepage:');
};
return $form;
}
Ten samotny login este skratim ale funguje :)
- matopeto
- Člen | 395
nerob toto:
$this->request->getPost('mail');
ale pouzi normalne values s formu vid: https://github.com/…mFactory.php#L42
este raz vravim, pozri si ten sandbox poriadne :)