Call to undefined method SystemContainer::createUsers()
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Aleš Jandera
- Člen | 24
Ahoj, chybě rozumím ale nechálu jak je to možné. Mrkněte se prosím někdo na zdrojáky kde mám chybu. Moc děkuju. potřebuju vložit formulář do databáze. Takže jsem si připojil databázi. Vytvořil model Users.php
use Nette\Database\Connection,
Nette\Database\Table\Selection;
class Users extends Selection
{
public function __construct(\Nette\Database\Connection $connection)
{
parent::__construct('users', $connection);
}
public function setPassword($id, $password)
{
$this->getTable()->where(array('id' => $id))->update(array(
'password' => Authenticator::calculateHash($password)
));
}
}
Ten soubor mám zaregistrovanej v configu jako service:
services:
authenticator: Authenticator
users: Users
No a presenter je náskledující:
use Nette\Application\UI;
/**
* Sign in/out presenters.
*/
class RegPresenter extends BasePresenter
{
public function renderDefault()
{
$user = $this->getUser()->getId();
$this->template->Users = $this->context->createUsers();
}
/**
* Sign-in form factory.
* @return Nette\Application\UI\Form
*/
protected function createComponentRegisterForm()
{
$form = new UI\Form();
$form->addText('email', 'Email:', 19, 100)
->setRequired('Email musí být vyplněn.');
$form->addPassword('password', 'Heslo:', 19, 100)
->setRequired('Heslo musí být vyplněno.')
->addRule(UI\Form::MIN_LENGTH, 'Heslo je moc krátké. Mimimálí délka %d', 7);
$form->addPassword('confirm', 'Heslo znovu:', 19, 100)
->setRequired('Heslo pro kontrolu.')
->addRule(UI\Form::EQUAL, 'Hesla se neschodují.', $form['password']);
$form->addText('jmeno', 'Jméno:', 19, 100)
->setRequired('Jméno musí být vyplněno.');
$form->addText('prijmeni', 'Příjmení:', 19, 100)
->setRequired('Příjmení musí být vyplněno.');
$form->addText('ulice', 'Ulice:', 19, 100);
$form->addText('mesto', 'Město:', 19, 100)
->setRequired('Město musí být vyplněno.');
$form->addText('psc', 'PSČ:', 19, 100);
$typ = array(
'F' => 'Firma',
'0' => 'Občan',
);
$form->addRadioList('typ', 'Typ:', $typ)->getSeparatorPrototype()->setName(NULL)->setRequired('Typ musí být vyplněn.');
$form->addText('firma', 'Firma:', 19, 100);
$form->addText('ic', 'IČ/IČO:', 19, 100);
$form->addSubmit('create', 'Registrovat');
$form->onSuccess[] = callback($this, 'RegisterFormSubmitted');
$form->addProtection('Časová kontrola vypršela. Prosím vyplňte formulář znovu..');
return $form;
if ($form->isSuccess()) {
echo 'Vaše registrace byla psoěšná.';
$values = $form->getValues();
dump($values);
}
}
public function RegisterFormSubmitted(UI\Form $form)
{
$pw = md5($form->values->password);
$this->context->createUsers()->insert(array(
'email' => $form->values->email,
'password' => $pw,
'reg_date' => new DateTime(),
'jmeno' => $form->values->jmeno,
'primeni' => $form->values->prijmeni,
'ulice' => $form->values->ulice,
'mesto' => $form->values->mesto,
'psc' => $form->values->psc,
'typ' => $form->values->typ,
'firma' => $form->values->firma,
'ic' => $form->values->ic,
));
$this->flashMessage('Registrace byla úspěšná.', 'success');
$this->redirect('this');
}
}
Díky moc už jsem to dělal několikát dříve a nevím kde může být chyba. Děkuji za každou pomoc.
- studna
- Člen | 181
Přejdu přímo k věci:
https://api.nette.org/…ntainer.html#…
<?php
// namísto 'create*' použij
$u = $this->context->getService('users');
// případně
$u = $this->context->users;
?>
- Aleš Jandera
- Člen | 24
Díky za radu už to funguje.
Na formulář se ještě podívám. Zatím je řeším podle quickstartu.
Vždycky fungovali tak jsem neměl potřebu se dívat někam jinam.