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
+
0
-

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
+
0
-

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;
?>
Jakub Kontra
Člen | 30
+
0
-

Ten formulář, šel by udělat i lepším způsobem podívej se do dokumentace :)

Aleš Jandera
Člen | 24
+
0
-

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.

enumag
Člen | 2118
+
0
-

JimmyBlack napsal(a):

Ten formulář, šel by udělat i lepším způsobem podívej se do dokumentace :)

Přiznám se, že mi uniká, cos tím „lepším způsobem“ myslel. Mohl bys to objasnit? :-)