Nelze načíst presenter po doplnění presenteru

Jack.q
Člen | 54
+
0
-

Zdravím,
mám takový menší problém, v AccountPresenter jsem zapsal dvě anotace jednu s injectem pro LinkGenerator a druhou s injectem pro ITemplateFactory, následně jsem vytvořil emailovou šablonu v presenteru. Pokud místo inject anotaci zapíšu __construct web píše to stejné jako je uvedeno vespod

public function __construct(LinkGenerator $linkGenerator, ITemplateFactory $templateFactory) {
    parent::__construct();
    $this->linkGenerator = $linkGenerator;
    $this->templateFactory = $templateFactory;
}
protected function createTemplate() {
    $template = $this->templateFactory->createTemplate();
    $template->getLatte()->addProvider('uiControl', $this->linkGenerator);

    return $template;
}

a najednou mi web napíše:

Cannot load presenter 'Account', class 'App\Presenters\AccountPresenter' was not found

Na tento problém pomůže když u odkazu v Account:default udělám tento zápis: Front:Account:default, jenže pak se mi načte jen bílá stránka bez jakýchkoliv stylu, bez layoutu apod.
Pokud odstraním z AccountPresenter výše zmíněny zápis včetně anotací vše funguje jak má. Kde by mohl být problém?

Editoval Jack.q (16. 2. 2018 15:08)

Šaman
Člen | 2625
+
0
-

Jako první pro jistotu zkontroluj namespace u toho AccountPresenteru. Nemáš to dělené na moduly? (App\Front\Presenters\…)

Jack.q
Člen | 54
+
0
-

Ano mám to dělané na moduly, a namespace mám: App\FrontModule\Presenter

Editoval Jack.q (16. 2. 2018 18:09)

Šaman
Člen | 2625
+
0
-

Tak je divné, že to nemůže najít App\Presenters\AccountPresenter. Ukaž nastavení mapování presenterů v configu. A možná i router, pokud není ze sandboxu. Co děláš v tom LinkGenerator?

Jack.q
Člen | 54
+
0
-

Šaman napsal(a):

Tak je divné, že to nemůže najít App\Presenters\AccountPresenter. Ukaž nastavení mapování presenterů v configu. A možná i router, pokud není ze sandboxu. Co děláš v tom LinkGenerator?

Problém je jen v AccountPresenter, protože jinak celý web funguje, jen ten AccountPresenter, LinkGenerátor je pro to aby fungovalo makro v šabloně e-mailu, který má za úkol poslat aktivační odkaz na mail, což e-mail pošle, ale jakmile přidám zápis do AccountPresenter tak píše, že nebyl nalezen, zde je celý presenter, možná je chyba jinde

Pokud by byl problém v mapování presenteru nefungoval by přeci ani jeden presenter, to stejné i router, kdyby byl problém nefungoval by celý web. Jenže celý web funguje, až na stránku s účtem po přihlášení.

<?php

namespace App\FrontModule\Presenters;

use Nette;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;
use Latte\Engine;

class AccountPresenter extends BasePresenter{

    /**
     * @inject
     * @var \Nette\Application\LinkGenerator
     */

    public $linkGenerator;

    /**
     * @inject
     * @var \Nette\Application\UI\ITemplateFactory
     */

    public $templateFactory;

    public function actionOdesliAktivacniEmail($email) {
        $sablona = __DIR__ . '/templates/Account/mail.latte';
        $latte = new Engine;

        $template = $this->createTemplate();
        $template->token = 'nejakyHash';
        $template->setFile($sablona);

        $mail = new Message();
        $mail ->addTo($email)
              ->setFrom('info@info.cz')
              ->setSubject('Potvrďte svůj účet')
              ->setHtmlBody($template);
        $mailer = new SendmailMailer;
        $mailer->send($mail);
        $this->flashMessage('Aktivační email byl odeslán', 'info');
        $this->redirect('Account:send');
    }

    protected function createTemplate() {
        $template = $this->templateFactory->createTemplate();
        $template->getLatte()->addProvider('uiControl', $this->linkGenerator);

        return $template;
    }

}

Editoval Jack.q (17. 2. 2018 9:41)

Šaman
Člen | 2625
+
0
-

Aha, zkus dát jen $this->redirect('send');, nebo použít plnou cestu i s modulem.

Jack.q
Člen | 54
+
0
-

Šaman napsal(a):

Aha, zkus dát jen $this->redirect('send');, nebo použít plnou cestu i s modulem.

redirect má za úkol jen akci po odeslání a následném přesměrování, problém je dle mého názoru někde v tomto

protected function createTemplate() {
    $template = $this->templateFactory->createTemplate();
    $template->getLatte()->addProvider('uiControl', $this->linkGenerator);

    return $template;
}

nebo v tomto

/**
     * @inject
     * @var \Nette\Application\LinkGenerator
     */

    public $linkGenerator;

    /**
     * @inject
     * @var \Nette\Application\UI\ITemplateFactory
     */

    public $templateFactory;

Editoval Jack.q (17. 2. 2018 11:51)

CZechBoY
Člen | 3608
+
0
-

Ukaž ten mapping.

Jack.q
Člen | 54
+
0
-

CZechBoY napsal(a):

Ukaž ten mapping.

mapping:
		*: App\*Module\Presenters\*Presenter
CZechBoY
Člen | 3608
+
0
-

No a když si tam dal

$this->redirect('send');

jak psal @Šaman tak to bylo ok nebo?

Jack.q
Člen | 54
+
0
-

CZechBoY napsal(a):

No a když si tam dal

$this->redirect('send');

jak psal @Šaman tak to bylo ok nebo?

Ne, nebylo, opět to psalo to co píšu v prvním příspěvků

Ondřej Kubíček
Člen | 494
+
0
-

co máš v té šabloně mail.latte ? respektive to Account:default voláš kde? když to fungovalo s :Front:, bílá stránka je na te send stránce nebo kde?

Jack.q
Člen | 54
+
0
-

Ondřej Kubíček napsal(a):

co máš v té šabloně mail.latte ? respektive to Account:default voláš kde? když to fungovalo s :Front:, bílá stránka je na te send stránce nebo kde?

Bílá stránka bez stylu, a bez ničeho je stránka Account:default, a jakákoliv jiná stránka v Account. Na Account:default je uživatel přesměrován po přihlášení na webu.

mail.latte

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Potvrzení registrace</title>
    <style>
        .logo{
            margin: 0px auto;
        }

        .logo img{
            border-radius: 50%;
            max-width: 85px;
        }

        .black{
            color: rgb(0, 0, 0);
        }

        h2{
            font-weight: lighter;
            color: rgb(175, 170, 170);
        }

        p:last-child{
            font-size: small;
        }
    </style>
</head>
<body>
    <div class="logo">
        <img src=http://url.com/img/logo.jpg alt="">
    </div>
    <p>Dobrý den {$user->identity->first}&nbsp;{$user->identity->last},</p>
    <p>Nedávno jste se zaregistrovali. Svoji registraci dokončíte tak , že svůj účet potvrdíte.</p>
    <a href="{link Front:Homepage:verify, $token}">Potvrďte Váš účet</a>
    <h2><span class="black">Systém</span> umožní stát se členem velké rodiny vzájemně spolupracujících lidi a více.</h2>
    <p>Tuto zprávu jsme poslali {$user->identity->mail}. Pokud nechcete tyto e-maily od nás dostávat, <a href="">zrušte jejích odběr</a>. Pokud jste si účet na webu pomocí tohoto e-mailu nevytvořili vy, <a href="mailto:info@url.com">dejte nám vědět</a></p>
    <a href="mailto\:info@url.com">info@url.com</a>
</body>
</html>
David Matějka
Moderator | 6445
+
+1
-

jelikoz prekryvas createTemplate z presenteru svou implementaci, ktera to rozbiji

Jack.q
Člen | 54
+
0
-

David Matějka napsal(a):

jelikoz prekryvas createTemplate z presenteru svou implementaci, ktera to rozbiji

Čím překrývam, respektive kterou implementací?

Ondřej Kubíček
Člen | 494
+
0
-

Přepisuješ tu metodu createTemplate(), protože ta je definována v rodiči https://api.nette.org/…ter.php.html#…

Jack.q
Člen | 54
+
0
-

@DavidMatějka Moc díky za radu, která problém vyřešila
@OndřejKubíček Moc díky za link