Error při používání $this->redirect(‚Homepage:default‘);

Colorek
Člen | 2
+
0
-

Ahoj,
na předešlých stránkách, které jsem dělal šlo vše naprosto bez problémů a $this->redirect(‚kamkoli:kamkoli‘); fungovalo naprosto dobře, ale najednou, když jsem založil úplně nové stránky naskakuje tento error. Můžete mi někdo prosím poradit?
Obrázek erroru: https://i.ibb.co/…Untitled.png;

<?php

declare(strict_types=1);

namespace App\Presenters;

use Nette;


final class FormPresenter extends Nette\Application\UI\Presenter
{
    private $errors = array();

    function __construct(Nette\Http\Request $http)
    {
        if ($http->isMethod("POST")) {

            $username = htmlspecialchars($http->getPost('username'));
            $email = htmlspecialchars($http->getPost('email'));
            $password = htmlspecialchars($http->getPost('password'));
            $rePassword = htmlspecialchars($http->getPost('re-password'));

            //CHECK USERNAME
            if (!ctype_alnum($username)) {
                array_push($this->errors, 'Your username is not valid!');
            }

            //CHECK EMAIL
            if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
                array_push($this->errors, 'Your email address is not valid!');
            }

            //CHECK PASSWORD
            if (!$password == $rePassword) {
                array_push($this->errors, 'Passwords do not match!');
            }
            else {
                if (strlen($password) < 6) {
                    array_push($this->errors, 'Your password is too short! (min 6 characters)');
                }
            }

            //INSERT TO DATABASE
            if (sizeof($this->errors) == 0) {
                $this->redirect('Homepage:default'); /*<----------------------------------------------------------------*/
            }
        }
    }
    function renderSignup() {
        $this->template->errors = $this->errors;
    }
}
  • HomepagePresenter
<?php

declare(strict_types=1);

namespace App\Presenters;

use Nette;


final class HomepagePresenter extends Nette\Application\UI\Presenter
{
    function renderDefault() {

    }
}
CZechBoY
Člen | 3608
+
+1
-

Tyjo docela by me zajmalo k cemu tam to Nette vlastne mas :-). Slysel si uz o Nette\Forms? Nemusel bys resit nejaky flash messages, ani kontrolovat jestli to mas post pozadavek atd.

Jinak tvym problemem asi bude ze vse delas v konstruktoru. Zkus to prehodit treba do actionDefault.

edit: opraven bullshit

Editoval CZechBoY (22. 12. 2019 14:56)

MajklNajt
Člen | 471
+
+1
-

CZechBoY napsal(a):

Jinak tvym problemem asi bude ze vse delas v presenteru. Zkus to prehodit treba do actionDefault.

iba opravím, že si asi chcel napísať „v konstruktoru“ (len aby nevznikol zmätok)

@Colorek keď sa pozrieš na riadok 779 v Nette\Application\UI\Presenter zistíš, že sa tam snaží použiť meno aktuálneho presenteru, ktoré v konstruktore ešte nie je zistené, čiže stačí tú „logiku“ prehodiť do startup().

Každopádne, ako píše CZechBoY, použi radšej formuláre (teda ak nerobíš nejaké API, ale aj na to sú pekné balíčky…)

Colorek
Člen | 2
+
0
-

Díky všem, pokusím se to předělat do Forms.
Předtím už jsem to už tak udělané měl, akorát mě štvalo, že to automaticky házi do table, což nechci :D

Marek Bartoš
Nette Blogger | 1171
+
+2
-

Tabulka je výchozí. V dokumentaci najdeš, jak formulář renderovat manuálně, případně jsou na githubu ukázky přenastavení renderu pro bootstrap nebo hromady rozšiřujících balíčků včetně rendererů

Editoval Mabar (22. 12. 2019 12:26)