$form->getValues() potrebuji aby vratilo pole

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

Ahojte,

Předem se omlouvám jestli jsem ve špatném fóru,jenže dotaz se týká formuláře, databáze a zároveň jsem začátečník :D Ale zpět k dotazu:

Používám Nette, NotORM a ModelLoader od Srigiho (Diggriola), vše aktuální z GitHubu.

Výběr dat mi funguje na výbornou, jen mám problém s insertem.
Vytvořím např registrační formulář v FrontModule/UserPresenter :

function createComponentRegistrationForm()
    {
        $form = new \Nette\Application\UI\Form;
        $form->addText('nickname', 'Uživatelské jméno:');
	................................
        $form->addSubmit('submit', 'Registrovat');
        $form->onSuccess[] = callback($this, 'RegistrationFormSubmitted');
        return $form;
    }

A následně chci data uložit do databáze, kde použiji zhruba toto:

$data = $form->getValues();
$this->getModel('UsersModel)->insert($data);

Jenže to mi háže chybu:

Recoverable Error

Argument 1 passed to Diggriola\BaseModel::insert() must be an array, object given, called in /var/www/localhost/htdocs/PhpProject1/app/FrontModule/presenteres/UserPresenter.php on line 38 and defined

A BaseModel obsahuje tuto fci:

public function insert(array $data)
	{
		return $this->connection->{$this->tableName}()->insert($data);
	}

Někde jsem četl něco o přetypování objektu na pole, ale vůbec nevím co a jak..
Mockrát díky všem za ochotu ;)

hAssassin
Člen | 293
+
0
-

nejsem si 100% jisty, ale nevraci nahodou getValues() ArrayHash? Pokud ano, tak by melo stacit toto:

$data = (array)$form->getValues();
Melmen
Člen | 132
+
0
-

Jo máš recht, když jsem dumpnul $data , vrátilo mi to Nette\ArrayHash a teď to vrací Array.

Ale co čert nechtěl, vyskytl se další problém..
Laděnka mi hodí chybu:

PDOException #23000

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'

For key PRIMARAY… není to něco s primárním klíčem?? Protože v tabulce mám primární klíč id, ale proměnná $data neobsahuje žádnou informaci o id v tabulce..

//EDIT Děkuju :)

Editoval Melmen (30. 9. 2011 19:05)

Jan Voráček
Člen | 90
+
0
-

Jestli se jedná o MySQL, nemáš nejspíš na sloupci id nastavenou vlastnost auto_increment.

Editoval Jan Voráček (30. 9. 2011 19:09)

Melmen
Člen | 132
+
0
-

Ano, to byla ta chybička, mockrát díky !