Nelze načíst presenter po doplnění presenteru
- Jack.q
- Člen | 54
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)
- Jack.q
- Člen | 54
Š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 tomLinkGenerator
?
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)
- Jack.q
- Člen | 54
Š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)
- Ondřej Kubíček
- Člen | 494
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
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} {$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
jelikoz prekryvas createTemplate z presenteru svou implementaci, ktera to rozbiji
- Ondřej Kubíček
- Člen | 494
Přepisuješ tu metodu createTemplate(), protože ta je definována v rodiči https://api.nette.org/…ter.php.html#…