Chyba v insertu do DB, která se nezobrazí

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

Zdravím, musím otravovat znova
Mám jednoduchý presenter napojený na ještě jednodušší šablonu.

use Nette\Application\UI\Form;

class registerPresenter extends BasePresenter {

    private $uzivatelRepository;
    private $mestoRepository;
    /*     * v
     * Sign-in form factory.
     * @return Nette\Application\UI\Form
     */

    protected function startup() {
	parent::startup();
	$this->uzivatelRepository = $this->context->uzivatelRepository;
	/*$this->mestoRepository = $this->context->mestoRepository;*/
    }

    protected function createComponentNovyUzivatel() {
	$form = new Form();
	$form->addText("jmeno", "Jméno:", 40, 100)->addRule(Form::FILLED, "Je nutné vyplnit jméno uživatele");
	$form->addPassword("heslo", "Heslo:", 40, 40)->addRule(Form::MIN_LENGTH, "Heslo by mělo mít alespoň %d znaků.", 6);
	$form->addPassword("heslo_2", "Opakujte heslo:", 40, 40)->addRule(Form::FILLED, "Heslo musíte zadata ještě jednou")->addRule(Form::EQUAL, "Hesla se musí schodovat", $form["heslo"]);
	$form->addText("email", "Email:", 40, 100)->addRule(Form::EMAIL, "Musíte zadat email")->addRule(Form::FILLED, "Musíte zadat email");
	$form->addSubmit('registrovat', "Registrovat se");
	$form->onSuccess[] = $this->novyUzivatelSubmitted;
	return($form);
    }

    public function novyUzivatelSubmitted(Form $form) {
	try {
	    $this->uzivatelRepository->createRegistration2($form->values->jmeno, $form->values->heslo, $form->values->email);
	    $this->flashMessage('Registrace se povedla můžete se přihlásit', 'success');
	    $this->redirect('sign:in');
	} catch (\PdoException $e) {
	    if (is_array($e->errorInfo) && $e->errorInfo[1] == 1062) {
		$form->addError("Tento uživatel nebo email byl již registrován");
	    } else {

	    }
	}
    }

}

presenter využívá ještě menší repository

namespace WebGame;
use Nette;

/**
 * Tabulka user
 */
class UzivatelRepository extends Repository {

    public function findByName($username) {
	return $this->findAll()->where('jmeno', $username)->fetch();
    }

    public function setPassword($id, $password) {
	$this->getTable()->where(array('id' => $id))->update(array('heslo' => \Authenticator::calculateHash($password)));
    }

    public function createRegistration($jmeno, $heslo, $email) {


	return $this->getTable()->insert(array(
	    'jmeno' => $jmeno,
	    'heslo' => \Authenticator::calculateHash($heslo),
	    'email' => $email,
	    'role' => "uzivatel"
	));



    }


}

A problém je, že místo aby se vložil řádek s registrací do adresáře, tak zůstane akorát zobrazený registrační formulář, prázdný. Pokud ale odstraním insert a dám tam třeba echo „AHOJ“; tak se zobrazí „AHOJ“, provede se redirect a flashMessage. Ale s insertem ve formuláři zůstane email a jméno.
Do DB se nevloží nic.
Díky za každou radu

Editoval cs_paladin (24. 9. 2013 15:59)

voda
Člen | 561
+
0
-

Asi ti to skočí do else části u zachytávání PdoException, přidej si tam nastavení chyby formuláři.

} catch (\PdoException $e) {
    if (is_array($e->errorInfo) && $e->errorInfo[1] == 1062) {
    	$form->addError("Tento uživatel nebo email byl již registrován");
    } else {
			// tady
    }
}
cs_paladin
Člen | 7
+
0
-

voda napsal(a):

Asi ti to skočí do else části u zachytávání PdoException, přidej si tam nastavení chyby formuláři.

} catch (\PdoException $e) {
    if (is_array($e->errorInfo) && $e->errorInfo[1] == 1062) {
    	$form->addError("Tento uživatel nebo email byl již registrován");
    } else {
			// tady
    }
}

Ještě, že jsou tu chytří lidé, moc děkuji, to je přesně to místo a už mám i chybu

ERROR 1467 (HY000): Failed to read auto-increment value from storage engine.
A tu už jsem snadno vyřešil nastavením AUTOINCERMENT na další číslo.

Díky moc

Editoval cs_paladin (24. 9. 2013 16:26)