Zachytit chybu a uživateli vypsat hlášku
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- kiCkZ
- Člen | 153
Zdravim,
chci se zeptat jakým způsobem řešit zachytávání vyjímek a následně uživateli vypsat ve flash message chybovou hlášku.
Nyní mam model SignManager.php
<?php
namespace AdminModule\Model;
use Nette;
class SignManager implements Nette\Security\IAuthenticator {
const
TABLE_NAME = 'users',
COLUMN_ID = 'id',
COLUMN_NAME = 'username',
COLUMN_PASSWORD_HASH = 'password',
COLUMN_EMAIL = 'email',
COLUMN_ROLE = 'role';
private $database;
public function __construct(\Nette\Database\Context $database) {
$this->database = $database;
}
public function authenticate(array $credentials): Nette\Security\IIdentity {
list($username,$password) = $credentials;
$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME,$username)->fetch();
if(!$row) {
throw new UserNotFoundException('Uživatel nenalezen');
} elseif(!password_verify($password, $row['password'])) {
throw new BadPasswordExcetion('Špatné heslo.');
}
$array = $row->toArray();
return new Nette\Security\Identity($row[self::COLUMN_ID],$row['role'],$array);
}
}
class AuthenticationException extends \Nette\Security\AuthenticationException {}
class UserNotFoundException extends AuthenticationException {}
class BadPasswordExcetion extends AuthenticationException {}
Poté mam zachytávání v SignPresenteru.php, problém je, že při zachycení vidím jen Tracy hlášku, že je např. špatně heslo, jak docílim toho, aby se to zobrazilo na webu a já si to mohl separátně sledovat(pouze po vývojáře).
namespace AdminModule\Presenters;
use Nette,
Nette\Application\UI\Form,
Nette\Utils\Html,
AdminModule\Model\UserNotFoundException,
AdminModule\Model\BadPasswordException;
class SignPresenter extends BasePresenter {
private $userManager;
public function __construct(\AdminModule\Model\UserManager $userManager) {
$this->userManager = $userManager;
}
public function createComponentSignUpForm() {
$form = new Form;
$form->addText('username','Přihlašovací jméno: ')
->setRequired();
$form->addEmail('email','E-mail: ')
->setRequired();
$form->addPassword('password','Heslo: ')
->addRule(Form::MIN_LENGTH,'Položka musí obsahovat minimálně %d znaků',8)
->setRequired();
$form->addPassword('verifyPassword','Potvrzení hesla: ')
->addRule(Form::MIN_LENGTH,'Položka musí obsahovat minimálně %d znaků',8)
->addRule(Form::EQUAL,'Hesla se musí shodovat!',$form['password'])
->setRequired();
$form->addSubmit('save','Zaregistrovat se');
$form->onSuccess[] = [$this,'signUpFormSucceeded'];
return $form;
}
public function signUpFormSucceeded($form,$values) {
try {
$this->userManager->register($values->username,$values->email,$values->password);
$this->flashMessage(
Html::el()
->addHtml('<div class="successful-message">')
->addText('Registrace proběhla úspěšně')
->addHtml('</div>')
);
$this->redirect('Sign:in');
} catch (UserNotFoundException $e) {
$this->flashMessage(
Html::el()
->addHtml('<div class="error-message">')
->addText('Uživatel nenalezen')
->addHtml('</div>')
);
} catch (BadPasswordException $e) {
$this->flashMessage(
Html::el()
->addHtml('<div class="error-message">')
->addText('Špatné heslo')
->addHtml('</div>')
);
}
}
public function createComponentSignInForm() {
$form = new Form;
$form->addText('username','Přihlašovací jméno: ')
->setRequired();
$form->addPassword('password','Heslo: ')
->setRequired();
$form->addSubmit('save','Přihlásit se');
$form->onSuccess[] = [$this,'signInFormSucceded'];
return $form;
}
public function signInFormSucceded($form,$values) {
try {
$this->getUser()->login($values->username,$values->password);
$this->redirect(':Admin:Homepage:');
} catch (UserNotFoundException $e) {
$this->flashMessage(
Html::el()
->addHtml('<div class="error-message">')
->addText('Uživatel nenalezen')
->addHtml('</div>')
);
} catch (BadPasswordException $e) {
$this->flashMessage(
Html::el()
->addHtml('<div class="error-message">')
->addText('Špatné heslo')
->addHtml('</div>')
);
}
}
public function actionOut() {
$this->getUser()->logout();
$this->flashMessage(
Html::el()
->addHtml('<div class="successful-message">')
->addText('Odhlášení proběhlo úspěšně.')
->addHtml('</div>')
);
$this->redirect('Sign:in');
}
}
Děkuji
Editoval kiCkZ (22. 8. 2017 10:11)