Problém s registráciou užívateľa

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

Ahojte,

mám problém s registráciou užívateľa. Snažil som sa všetko robiť podľa návodu a niektoré veci aj opraviť, ale stále mám problém. Najskôr som mal túto verziu triedy RegistePresenter.php >>
„Pre istotu napíšem postupnosť pár krokov“ >>

<?php
namespace App\Presenters;

use Nette;
use Nette\Application\UI,
    Nette\Application\UI\Form as Form;

class RegisterPresenter extends BasePresenter {

    private $users;

    protected function startup() {
        parent::startup();
        $this->users = $this->context->users;
    }

    public function renderRegister(){
    }

    protected function createComponentRegisterForm() {
        $form = new Form;
        $form->addText('username', 'Jméno');
        $form->addPassword('password', 'Heslo: *', 20)
                ->setOption('description', 'Alespoň 6 znaků')
                ->addRule(Form::FILLED, 'Vyplňte Vaše heslo')
                ->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaků.', 6);
        $form->addPassword('password2', 'Heslo znovu: *', 20)
                ->addConditionOn($form['password'], Form::VALID)
                ->addRule(Form::FILLED, 'Heslo znovu')
                ->addRule(Form::EQUAL, 'Hesla se neshodují.', $form['password']);
        $form->addSubmit('send', 'Registrovat');
        $form->onSuccess[] = callback($this, 'registerFormSubmitted');
        return $form;
    }

    public function registerFormSubmitted(Form $form) {
        $values = $form->getValues();
        $new_user_id = $this->users->register($values);
        if($new_user_id){
            $this->flashMessage('Registrace se zdařila, jo!');
            $this->redirect('Sign:in');
        }
    }
}
?>
<?php
ERROR : Nette\DI\Container::__get() is deprecated; use getService() or enable di.accessors in configuration.
na riadoku ==>> 15: $this->users = $this->context->users;
?>
<?php
Tak som to znemil na ==>> 15: $this->users = $this->dtb->table("users");
?>

Ukázalo mi ďalšiu chybu :

<?php
ERROR: Call to undefined function App\Presenters\callback()
na riadoku ==>> 33: $form->onSuccess[] = callback($this, 'registerFormSubmitted');
?>
<?php
Tak som to znemil na ==>> 33: $form->onSuccess[] = array($this, 'registerFormSubmitted');
?>

Teraz to ide … až na jednu vec :: >> Po vyplnení a odoslaní formulára mi napíše chybu :

<?php
ERROR: Call to undefined method Nette\Database\Table\Selection::register()
?>

… a pritom som od triedy Users.php pridal funkciu register … tak teraz neviem čo ďalej

Oli
Člen | 1215
+
0
-

chyba je tady: $this->users = $this->dtb->table("users");. Ty nastavuješ $this->users jako tabulku „users“ a vrací ti to selection.

Poud nechceš používat model, tak to musíš napsat celý $this->users = $this->dtb->table("users")->insert($data); a nebo si napsat nějakou třídu UserPresenter, které v konstruktoru předáš context a vytvoříš si metodu register.

Takeshi
Člen | 596
+
0
-

Oli napsal(a):

chyba je tady: $this->users = $this->dtb->table("users");. Ty nastavuješ $this->users jako tabulku „users“ a vrací ti to selection.

Poud nechceš používat model, tak to musíš napsat celý $this->users = $this->dtb->table("users")->insert($data); a nebo si napsat nějakou třídu UserPresenter, které v konstruktoru předáš context a vytvoříš si metodu register.

Ďakuje, ale nie, že by som nechcel používať model … ja neviem ako ho použiť. Chcem aby to vkladalo tak ako má byť, teda cez hash funkciu atď. … poraďte pls … ďakujem …

Editoval Takeshi (22. 11. 2015 12:24)